我试图根据相关记录的属性创建一个查询但是失败了
我有以下型号:
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_paye
为true
。
自昨天以来,我一直试图让我的脑袋绕过连接,范围,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})
感谢您的帮助
答案 0 :(得分:4)
这样的东西?
Pay.joins(:ee_pay => :company_pay).where(:company_pay => {:taxable => true})