我正在尝试根据关联记录的属性创建查询,但失败了
我有以下型号:
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 对象,其中属性
apply_paye
在他们关联的 CompanyPay 上是 true
.从昨天开始,我一直在努力解决连接、作用域、lambda 等问题,但我只是在舞台上让自己更加困惑。
我想要的查询是这样的,但我只是不知道如何正确地表达它
@records = Pay.where(employee_id: current_employee.id, {|p| p.company_pay.apply_paye == true}).order(:id)
谁能帮我吗。我可以写一个单行查询吗?我应该使用连接吗?应该使用 lambda 吗?
感谢您的关注
Edit 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
Edit 2 - Solved
根据 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})
关于ruby-on-rails - Rails 根据关联属性查询记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29729190/