0

我目前使用两个查询来解决我的问题,我确信可以将它们合并为一个。我目前有:

guest = Guest.find_by(email: params[:email].downcase)
booking = Booking.find_by(guest_id: guest.id)

客人和预订模型是相关的 - 一位客人有很多预订。

我想我在某个地方的 Rails 指南上看到了如何只用一个查询来做到这一点,但我找不到该页面。

4

3 回答 3

1

由于您已经建立了模型关联,因此答案比您想象的要简单得多:

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

在这种情况下不需要连接。

于 2013-09-14T12:22:16.753 回答
1

有几种方法。主要目的不是少写几行,而是要有可读的代码。

我会这样做兄弟:

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

确保你已经声明了Guestclass has_many :bookings

于 2013-09-14T12:14:14.617 回答
0

如果我没记错的话你可以试试

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

查看http://guides.rubyonrails.org/active_record_querying.html了解更多信息。

于 2013-09-14T12:06:16.927 回答