在我的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