Rails基于关联属性查询记录

时间:2015-04-19 11:22:35

标签: ruby-on-rails

我试图根据相关记录的属性创建一个查询但是失败了

我有以下型号:

class CompanyPay < ActiveRecord::Base
  has_many :ee_pay
  has_many :pay, :through => :ee_pay 
end

class EePay < ActiveRecord::Base
  belongs_to :company_pay
  has_many :pay
end

class Pay < ActiveRecord::Base
  belongs_to :ee_pay
  has_one :company_pay, :through => :ee_pay
end

我尝试创建一个返回所有Pay对象的查询,其中关联的CompanyPay上的属性apply_payetrue

自昨天以来,我一直试图让我的脑袋绕过连接,范围,lambdas等,但我只是在舞台上让自己更加困惑。

我想要的查询会是这样的,但我不知道如何正确地说出来

@records = Pay.where(employee_id: current_employee.id, {|p| p.company_pay.apply_paye == true}).order(:id)

任何人都可以帮助我。我可以写一行查询吗?我应该使用加入吗?应该使用lambda吗?

感谢您寻找

  

修改1

我编辑了原帖,因为我错误地提供了错误的属性名称(应该是apply_paye而不是taxable)。

尝试了fylooi提供的以下查询

@records = Pay.joins(:ee_pay => :company_pay).where(:pay => {:employee_id => current_employee.id }, :company_pay => {:apply_paye => true})

但是我收到以下错误:

    ActiveRecord::StatementInvalid in PayLinesController#update

    PG::UndefinedTable: ERROR: missing FROM-clause entry for table "pay" LINE 1: ...any_pays"."id" = "ee_pays"."company_pay_id" WHERE "pay"."emp... ^ : SELECT "pays".* FROM "pays" INNER JOIN "ee_pays" ON "ee_pays"."id" = "pays"."ee_pay_id" INNER JOIN "company_pays" ON "company_pays"."id" = "ee_pays"."company_pay_id" WHERE "pay"."employee_id" = 1 AND "company_pay"."apply_paye" = 't' ORDER BY "pays"."id" ASC
  

编辑2 - 已解决

根据David Aldridge的建议,将查询中的表名多个化。

这是最终查询:

@records = Pay.joins(:ee_pay => :company_pay).where(:pays => {:employee_id => current_employee.id }, :company_pays => {:apply_paye => true})

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

这样的东西?

Pay.joins(:ee_pay => :company_pay).where(:company_pay => {:taxable => true})