【问题标题】:In Rails, can I query and only get objects that have a linked object?在 Rails 中,我可以查询并仅获取具有链接对象的对象吗?
【发布时间】:2013-09-23 11:53:35
【问题描述】:

所以我有这个对象,我们称它为 Dog,而另一个对象,我们称它为 Collar。

class Dog < ActiveRecord::Base
  has_one :collar
end

class Collar < ActiveRecord::Base
  belongs_to :dog
end

我能否获得有项圈的狗的列表?理想情况下,比以下方式稍微不那么尴尬:

Dog.joins(:collar).where(Collar.arel_table['id'].not_eq(nil))

对于那些可能想知道“arel_table”位的人来说,这是一种与 DB 无关的方式来表示“IS NOT NULL”。

【问题讨论】:

    标签: ruby-on-rails join rails-activerecord arel


    【解决方案1】:

    你可以直接使用joins

    Dog.joins(:collar)
    

    这将返回有项圈的狗。

    甚至不需要添加uniq,因为这是has_one关系,所以不会返回重复的狗。

    【讨论】:

      【解决方案2】:

      在 Collar 或 Dog 模型中创建范围怎么样:

      scope :with_something, where( "foreign_key IS NOT NULL" )

      【讨论】:

      • 这不是一个坏主意,但感觉 SQL 太多而 AREL 不够。 scope :with_collar, -&gt;{ joins(:collar) } 听起来很酷。
      猜你喜欢
      • 2022-12-02
      • 2019-06-16
      • 2015-03-10
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多