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})