我有一个模特:动物
belongs_to :owner
我有一个模特:所有者
has_many :animals
所有者有一个布尔属性active
def self.not_active
where('owner.active == ?', false)
end
上述代码由于某种原因不起作用。我已经尝试了很多东西,但不断出错。当调用类似Animal.first.owner.active
之类的东西时,我会返回true或false,但数据库调用必须不同......
为了澄清,我想要他们的主人不活跃的动物。我不想做相反的电话(从业主数据库开始并检查活动和返回动物)因为我正在从动物链接到一起的电话
答案 0 :(得分:1)
您的代码应为:
def self.not_active
includes(:owner).where("owners.active = ?", false)
end
在纯SQL中引用模型时,如上所述,您需要使用表名,而不是单数模型名。因此,所有者,而非所有者。
更清晰的风格是:
def self.not_active
includes(:owner).where(owners: {active: false})
end
Rails AREL将正确地引用查询中的活动属性,您不必担心确切的表/模型名称。