在Rails中,我可以查询并仅获取具有链接对象的对象吗?

时间:2013-09-18 16:00:05

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

所以我有这个对象,我们称之为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”的方式。

2 个答案:

答案 0 :(得分:1)

然后在Collar或Dog模型中创建范围如下:

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

答案 1 :(得分:1)

您可以直接使用joins

Dog.joins(:collar)

这将使带领的狗返回。

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