Ruby on rails 基于关联属性的Rails查询记录

Ruby on rails 基于关联属性的Rails查询记录,ruby-on-rails,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 < ActiveReco

我试图创建一个基于关联记录属性的查询,但失败得很惨

我有以下几种型号:

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
有人能帮我吗。我可以写一行查询吗?我应该使用连接吗?应该使用lambda吗

谢谢你的关注

编辑1

我编辑了原始帖子,因为我错误地给出了错误的属性名称(应该是
apply\u paye
而不是
应纳税

尝试了Fyloi提供的以下查询

@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})
谢谢你的帮助像这样的事

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

我应该把我的另一个查询参数“employee\u id:current\u employee.id”放在哪里?
。其中(:pay=>{:employee\u id=>current\u employee.id},:company\u pay=>{:sadable=>true})
无法实现。我在
company\u pay
上输入了错误的属性名称。它实际上被称为
apply\u paye
。我得到的错误是
PG::UndefinedTable:error:表“pay”第1行的子句条目中缺少:…any_pays.“id”=“ee_pays”。“company_pay_id”其中的“pay”。“emp…”从“支付”中选择“支付”。*从“支付”中选择“支付”。“id”=“支付”。“支付”中选择“支付”。“公司支付”中选择“公司支付”。“id”=“公司支付”。“公司支付”中选择“公司支付”。“员工id”=1和“公司支付”。“支付”中选择“t”命令。“id”ASC
将WHERE子句中的表格名称多元化:WHERE(:公司支付=>{:sadable=>true})或者您可以在名为“is_sadable”的CompanyPay上定义一个类方法,定义为“where(:sadable=>true)”,然后使用“Pay.joins(:ee_Pay=>:company_Pay).merge(CompanyPay.is_sadable)”。这将保留CompanyPay实例在其自己的类中是否应纳税的逻辑。
Pay.joins(:ee_pay => :company_pay).where(:company_pay => {:taxable => true})