2013-09-14 3 views
0

В настоящее время я использую два запроса для решения моей проблемы, и я уверен, что их можно объединить в один. В настоящее время у меня есть:Rails ActiveRecord Присоединение запросов

Модели для гостей и бронирования связаны - у одного гостя есть много заказов.

Я думаю, что я видел в Rails-путеводителях где-нибудь, как это сделать, используя только один запрос, но я не могу найти страницу.

ответ

1

Поскольку у вас есть модели ассоциаций на месте, ответ гораздо проще, чем вы думаете:

bookings = Guest.find_by_email(params[:email].downcase).bookings 

Нет необходимости для соединений в этом случае.

+0

да спасибо! это то, что я видел - из-за ассоциаций это мертво просто, но просто не могу вспомнить, где я это видел, ха-ха – tommyd456

+0

, но так же, как я уже предложил, я думаю, @mjnissim – tommyd456

+0

Да, после того, как он отредактировал его :) – depa

0

Если я не ошибаюсь, вы можете попробовать

Booking.joins(:guest).where(guests: {email: params[:email].downcase}).all 

Отъезд также http://guides.rubyonrails.org/active_record_querying.html для получения дополнительной информации.

+0

Я подозреваю, что он хочет получить заказ, а не гость, и в этом случае правильная инструкция будет: 'Booking.joins (: guest) .where (guest: {email: params [: email] .downcase}) .first' (если бронирование принадлежит гостю) –

+0

Да, это правильно. Это может сработать. –

+0

Да, это заказ, который мне нужен, но у контроллера есть только электронная почта гостя, чтобы получить заказ - спасибо за предложения. Ребята – tommyd456

1

Существует несколько способов. Основной объект - не писать меньше строк, а иметь читаемый код.

Я хотел бы сделать это таким образом, братан:

# For style and readability, put this in a separate line: 
email = params[:email].downcase 
# then: 
bookings = Guest.find_by(email: email).bookings 

Убедитесь, что вы заявили, что Guest класса has_many :bookings.

+0

Я не уверен на 100%, но я думаю, что эта идиома приведет к двум различным запросам вместо одного запроса. –

+0

@ ты, ты прав. Изменено на 'Guest.find_by (электронная почта: электронная почта) .bookings' – mjnissim

+0

это большое спасибо. – tommyd456

Смежные вопросы