Я пытаюсь создать запрос на основе атрибута ассоциированной записи, но я терпеть неудачу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
I 'm пытается создать запрос, который возвращает все объекты Pay, где атрибут apply_paye
на их ассоциированном CompanyPay равен true
.
Я пытаюсь завязать голову, объединять, лямбда и т. Д. Со вчерашнего дня, но я просто смущаю себя больше на сцене.
Запрос Я хочу, чтобы было что-то вроде этого, но я просто не знаю, как выразить это правильно
@records = Pay.where(employee_id: current_employee.id, {|p| p.company_pay.apply_paye == true}).order(:id)
Может кто-нибудь помочь мне. Можно написать однострочный запрос? Должен ли я использовать соединение? Следует ли использовать лямбда?
Спасибо за взгляд
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
Pluralising имена таблиц в запросе работали, согласно предложению от Давида Олдридж.
Это последний запрос:
@records = Pay.joins(:ee_pay => :company_pay).where(:pays => {:employee_id => current_employee.id }, :company_pays => {:apply_paye => true})
Спасибо за вашу помощь
Где я могу поместить свой другой параметр запроса 'employee_id: current_employee.id'? –
'.where (: pay => {: employee_id => current_employee.id},: company_pay => {: taxable => true})' – fylooi
Не могу заставить это работать. Я дал неправильное имя атрибута на 'company_pay'. Это называется 'apply_paye'. Ошибка, которую я получаю, это 'PG :: UndefinedTable: ERROR: отсутствует запись FROM-clause для таблицы« платите »LINE 1: ... any_pays». «Id» = «ee_pays». «Company_pay_id» ГДЕ «платите». «emp ... ^: SELECT« платит ». * FROM« платит »INNER JOIN« ee_pays »ON« ee_pays ».« id »=« платит ».« 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" платит "." id "ASC' –