如何将ActiveRecord :: QueryMethods :: WhereChain转换为ActiveRecord_Relation

时间:2015-04-27 05:26:39

标签: ruby-on-rails ruby activerecord

我今天有不典型的问题。我有哪些结论需要阻止:

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?

4 个答案:

答案 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