所以我有这个对象,我们称之为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”的方式。
答案 0 :(得分:1)
然后在Collar或Dog模型中创建范围如下:
scope :with_something, where( "foreign_key IS NOT NULL" )
答案 1 :(得分:1)
您可以直接使用joins
Dog.joins(:collar)
这将使带领的狗返回。
甚至无需添加uniq
,因为这是has_one关系,因此不会返回重复的狗。