我目前使用两个查询来解决我的问题,我确信可以将它们合并为一个。我目前有:
guest = Guest.find_by(email: params[:email].downcase)
booking = Booking.find_by(guest_id: guest.id)
客人和预订模型是相关的 - 一位客人有很多预订。
我想我在某个地方的 Rails 指南上看到了如何只用一个查询来做到这一点,但我找不到该页面。
我目前使用两个查询来解决我的问题,我确信可以将它们合并为一个。我目前有:
guest = Guest.find_by(email: params[:email].downcase)
booking = Booking.find_by(guest_id: guest.id)
客人和预订模型是相关的 - 一位客人有很多预订。
我想我在某个地方的 Rails 指南上看到了如何只用一个查询来做到这一点,但我找不到该页面。
由于您已经建立了模型关联,因此答案比您想象的要简单得多:
bookings = Guest.find_by_email(params[:email].downcase).bookings
在这种情况下不需要连接。
有几种方法。主要目的不是少写几行,而是要有可读的代码。
我会这样做兄弟:
# For style and readability, put this in a separate line:
email = params[:email].downcase
# then:
bookings = Guest.find_by( email: email ).bookings
确保你已经声明了Guest
class has_many :bookings
。
如果我没记错的话你可以试试
Booking.joins(:guest).where(guests: {email: params[:email].downcase}).all
查看http://guides.rubyonrails.org/active_record_querying.html了解更多信息。