在Rails中查找没有关系的模型实例

时间:2013-02-22 12:07:27

标签: ruby-on-rails-3 relational-database where belongs-to has-one

class User
has_one :settings

class Settings
belongs_to :user

我想做点什么

@user_with_no_settings = User.where(:settings => nil)

但这会返回一个空关系。

如何查找没有与之相关设置的所有用户? (所以我会找到它们并创建它们)

2 个答案:

答案 0 :(得分:3)

最重要的是,您的关联不正确;

将其更改为:

class User
has_one :setting

class Settings
belongs_to :user

班级名称是复数,但关联has_one始终是单数。因此,您无法将:settings用于has_one作为has_many的反对,而User.where("id not in (select user_id from settings)") 始终是复数。

使用此:

{{1}}

上述查询将为所有没有与之关联的设置的用户提供。

答案 1 :(得分:0)

好。在您的情况下,您可能需要尝试此代码。

User.where('id NOT IN (?)', User.joins(:settings).pluck('settings.user_id'))

但是,您需要遵循Rails惯例。

将设置更改为设置。