0

所以我有这个对象,我们称它为 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”位的人的说明,这是说“IS NOT NULL”的与 DB 无关的方式。

4

2 回答 2

1

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

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

于 2013-09-18T16:09:06.350 回答
1

你可以直接joins使用

Dog.joins(:collar)

这将返回有项圈的狗。

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

于 2013-09-18T16:11:08.280 回答