class User
has_one :settings
class Settings
belongs_to :user
私は何かをしたい
@user_with_no_settings = User.where(:settings => nil)
しかし、これは空のリレーションを返します。
関連する設定がないすべてのユーザーを見つけるにはどうすればよいですか? (だから私はそれらを見つけて作成します)
class User
has_one :settings
class Settings
belongs_to :user
私は何かをしたい
@user_with_no_settings = User.where(:settings => nil)
しかし、これは空のリレーションを返します。
関連する設定がないすべてのユーザーを見つけるにはどうすればよいですか? (だから私はそれらを見つけて作成します)
最も重要なのは、関連付けが正しくないことです。
次のように変更します。
class User
has_one :setting
class Settings
belongs_to :user
クラス名は複数形ですが、関連付けhas_one
は常に単数形です。そのため、常に複数形である which:settings
に対して forhas_one
を使用することはできません。has_many
これを使って:
User.where("id not in (select user_id from settings)")
上記のクエリは、設定が関連付けられていないすべてのユーザーを提供します。
わかった。あなたの状況では、このコードを試してみる必要があるかもしれません。
User.where('id NOT IN (?)', User.joins(:settings).pluck('settings.user_id'))
ただし、Railsコンベンションに従う必要があります。
設定を設定に変更します。