booking = Booking.find_by(member_id: Member.where(id: 1).select(:id))
但是,将项目升级到Rails之后,此查询返回nil> 4.2。
在Rails 4.2中,以上查询生成以下SQL:
SELECT "bookings".* FROM "bookings" WHERE "bookings"."member_id" = $1 LIMIT 1 [["member_id", nil]]
“预订”属于“会员”,而“会员”具有许多“预订”。
有人知道还是看到原因?我会对解释感兴趣。
用弹珠替换选择将恢复预期的行为:
booking = Booking.find_by(member_id: Member.where(id: 1).pluck(:id))
生成的查询:SELECT "bookings".* FROM "bookings" WHERE "bookings"."member_id" = 1 LIMIT 1
编辑:数据库中存在ID为1的成员记录。
Member.where(id: 1).select(:id)
使用Rails 4.2返回以下结果和SQL语句:
=> #<ActiveRecord::Relation [#<Member id: 1>]>
SELECT "members"."id" FROM "members" WHERE "members"."id" = $1 [["id", 1]]
我发现在Rails 4.1项目中编写了以下ActiveRecord#find_by用法:booking = Booking.find_by(member_id:Member.where(id:1).select(:id))但是,此查询返回nil。 ..