我今天有不典型的问题。我有哪些结论需要阻止:
User.where do |user|
user if Avatar.where(id: user.avatar_id).empty?
end.first
这让我回报:
NoMethodError: undefined method `first' for #<ActiveRecord::QueryMethods::WhereChain:0x0000000c672f08>
有没有办法将ActiveRecord :: QueryMethods :: WhereChain转换为ActiveRecord_Relation?
答案 0 :(得分:1)
我这样做:
User.where( Avatar.where("avatars.id = users.avatar_id").exists.not ).first
答案 1 :(得分:1)
不应该这样的工作吗?
User.where(avatar_id: nil).first
但是,如果用户可能有avatar_id
的问题,但该ID不存在avatar
,那么您可能想要再做一些事情
User.where.not(id: Avatar.pluck(:user_id)).first
PS:您不能链接User.where
(通常),而应该User.all
答案 2 :(得分:1)
这应该为您提供User.avatar
与.first
不存在的关系,您可以在{/ 1}}上调用<{1}}
User.where(avatar_id: User.pluck(:avatar_id) - Avatar.pluck(:id))
答案 3 :(得分:0)
您可以在 Rails 6 中使用 .select
代替 .where
:
User.select do |user|
user if Avatar.where(id: user.avatar_id).empty?
end.first