0

我有一个模型:动物

belongs_to :owner

我有一个模型:所有者

has_many :animals

所有者具有布尔属性active

def self.not_active
  where('owner.active == ?', false)
end

上面的代码由于某种原因不起作用。我已经尝试了很多关于它的东西,但不断出现错误。当调用类似Animal.first.owner.active我返回真或假的东西时,但数据库调用必须不同......

为了澄清,我想要他们的主人不活跃的动物。我不想做相反的调用(从所有者数据库开始并检查活动和返回的动物),因为调用我从 Animal 链接在一起

4

1 回答 1

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 将负责正确引用查询中的活动属性,您不必担心确切的表/模型名称。

于 2013-09-10T17:44:13.843 回答