【问题标题】:Finding a model instance with no relation in Rails在 Rails 中查找没有关系的模型实例
【发布时间】:2013-02-22 12:07:26
【问题描述】:
class User
has_one :settings
class Settings
belongs_to :user
我想做类似的事情
@user_with_no_settings = User.where(:settings => nil)
但这会返回一个空关系。
如何找到所有没有相关设置的用户? (所以我会找到它们并创建它们)
【问题讨论】:
标签:
ruby-on-rails-3
relational-database
where
belongs-to
has-one
【解决方案1】:
最重要的是,你的关联不正确;
改成:
class User
has_one :setting
class Settings
belongs_to :user
类名称是复数,但关联 has_one 始终是单数。所以你不能用:settings 代替has_one 来反对has_many,因为has_many 总是复数形式。
使用这个:
User.where("id not in (select user_id from settings)")
上述查询将给出所有没有关联设置的用户。
【解决方案2】:
好的。在您的情况下,您可能需要一些尝试此代码。
User.where('id NOT IN (?)', User.joins(:settings).pluck('settings.user_id'))
但是,您需要遵循 Rails 约定。
将设置更改为设置。