来自belongs_to关系的数据库查询

时间:2013-09-10 17:20:38

标签: database ruby-on-rails-3 rails-postgresql

我有一个模特:动物

belongs_to :owner

我有一个模特:所有者

has_many :animals

所有者有一个布尔属性active

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

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

为了澄清,我想要他们的主人不活跃的动物。我不想做相反的电话(从业主数据库开始并检查活动和返回动物)因为我正在从动物链接到一起的电话

1 个答案:

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