0
class User
has_one :settings

class Settings
belongs_to :user

我想做类似的事情

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

但这会返回一个空关系。

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

4

2 回答 2

3

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

将其更改为:

class User
has_one :setting

class Settings
belongs_to :user

类名是复数,但关联has_one总是单数。所以你不能使用:settingsforhas_one作为反对has_many它总是复数。

用这个:

User.where("id not in (select user_id from settings)")

上面的查询将给出所有没有关联设置的用户。

于 2013-02-22T12:10:29.823 回答
0

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

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

但是,您需要遵循 Rails 约定。

将设置更改为设置。

于 2013-02-22T12:26:48.953 回答