ActiveRecord find_by与select一起使用时为什么返回nil?]

问题描述 投票:1回答:1
我发现了在Rails 4.1项目中编写的ActiveRecord#find_by的以下用法:

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。 ..

ruby-on-rails ruby-on-rails-4.2 ruby-on-rails-4.1
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.