在我的Rails應用程序,我有3種型號訂購和出租車和乘客。這裏是訂單表,其中taxi_id的架構出租車的外鍵,和passenger_id是乘客ActiveRecord的兩個選擇字段連接表
create_table "orders", force: :cascade do |t|
t.integer "passenger_id"
t.integer "taxi_id"
t.integer "price"
.
.
.
end
這裏的foregin關鍵是出租車的模式:
create_table "taxis", force: :cascade do |t|
t.string "taxiNo"
t.string "address"
.
.
end
這裏是我的乘客架構
create_table "passengers", force: :cascade do |t|
t.string "name"
t.string "address"
t.string "destination"
end
乘客的地址清除乘客的來源,地址出租車定義了這輛出租車的當前地址。
我試圖運行此查詢:
Taxi.joins(:orders => :passenger).select('taxis.id, orders.price, passengers.address, passengers.destination').where(:taxis =>{:id =>29 }).all
作爲一個事實的問題,我要找價格,地址和唯一的乘客場的目標,但結果是[#<Taxi id: 29, address: "Narva mnt25, Tartu, Estonia">]
。
在這裏你可以找到結果:
SELECT taxis.id, orders.price, passengers.address, passengers.destination FROM "taxis" INNER JOIN "orders" ON "orders"."taxi_id" = "taxis"."id" INNER JOIN "passengers" ON "passengers"."id" = "orders"."passenger_id" WHERE "taxis"."id" = 29
=> #<ActiveRecord::Relation [#<Taxi id: 29, address: "Narva mnt25, Tartu, Estonia">]>
它給了我Taxi_address同時,我問Order.price,Passenger.address和Passenger.destination
重要的一點:
我確信Taxi_id = 29存在
Taxi.find_by_id(29)
Taxi Load (0.2ms) SELECT "taxis".* FROM "taxis" WHERE "taxis"."id" = ? LIMIT 1 [["id", 29]]
=> #<Taxi id: 29, taxiNo: "T6", address: "Narva mnt25, Tartu, Estonia", status: "1", avalible_duration: 6, created_at: "2016-01-02 14:44:06", updated_at: "2016-01-02 14:44:06">
我相信,我有記錄在我的訂單表
Order.find_by_id(1)
Order Load (0.4ms) SELECT "orders".* FROM "orders" WHERE "orders"."id" = ? LIMIT 1 [["id", 1]]
=> #<Order id: 1, passenger_id: 40, taxi_id: 29, price: 925, created_at: "2016-01-04 04:40:52", updated_at: "2016-01-04 04:40:52">
我查詢** **的出租車,因爲在** **令我有另一個外鍵。但在這裏問一個簡單的問題,我只是刪除它。確切的查詢是這樣的: ** Taxi.joins(:orders =>:passenger).where(:taxis => {:id => 29})。全部** – Salman
這與您問題中的代碼顯着不同。請編輯您的問題以包含您使用的實際代碼。如果你沒有使用來自'乘客'的任何字段,那麼你爲什麼要使用'join(:orders =>:passenger)'還不清楚。也許你想要['includes'](http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations)? –
我編輯了我的問題,你可以看看那個 – Salman