【问题标题】: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 约定。

    将设置更改为设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      相关资源
      最近更新 更多