В моем приложении Rails, у меня есть 3 модели Order и такси и пассажира. Вот схема заказа таблицы, где taxi_id является внешний ключ такси, и passenger_id является Foregin ключ пассажираActiveRecord поле выбора из двух соединенных таблиц
create_table "orders", force: :cascade do |t|
t.integer "passenger_id"
t.integer "taxi_id"
t.integer "price"
.
.
.
end
здесь схема такси:
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 =>: пассажир) .where (: taxis => {: id => 29}).все ** – Salman
Это значительно отличается от кода в вашем вопросе. Измените свой вопрос, чтобы включить фактический код, который вы используете. Непонятно, почему вы используете 'joins (: orders =>: пассажир)', если вы не используете никаких полей от 'пассажиров'. Может быть, вы хотите ['includes'] (http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations) вместо этого? –
Я отредактировал мой вопрос, мог бы у плз взглянуть на это – Salman