У меня есть следующие ассоциации:
mobile_application.rb
has_many :events
event.rb
belongs_to :mobile_application
Следующее работает правильно:
MobileApplication.includes(:events)
#=> MobileApplication Load (1.6ms) SELECT `mobile_applications`.* FROM `mobile_applications` ORDER BY created_at desc
# Event Load (1.3ms) SELECT `events`.* FROM `events` WHERE `events`.`mobile_application_id` IN (746, 745, 744, ....
но когда я попробовал следующее,
MobileApplication.includes(:events).where("events.expiry_date >= ?", Time.zone.now)
выдает ошибку:
MobileApplication Load (1.2ms) SELECT `mobile_applications`.* FROM `mobile_applications` WHERE (events.expiry_date >= '2019-02-18 07:34:40.738517') ORDER BY created_at desc
Mysql2::Error: Unknown column 'events.expiry_date' in 'where clause': SELECT `mobile_applications`.* FROM `mobile_applications` WHERE (events.expiry_date >= '2019-02-18 07:34:40.738517') ORDER BY created_at desc
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'events.expiry_date' in 'where clause': SELECT `mobile_applications`.* FROM `mobile_applications` WHERE (events.expiry_date >= '2019-02-18 07:34:40.738517') ORDER BY created_at desc
Обновление
Пожалуйста, предложите какЯ могу отфильтровать это.Использование references
также приводит к следующей ошибке и также получено с ответом, предоставленным Мареком Липкой,
ActiveRecord::StatementInvalid: Mysql2::Error: Column 'created_at' in
order clause is ambiguous: SELECT `mobile_applications`.`id` AS t0_r0,
`mobile_applications`.`name` AS t0_r1, ...
Я думаю, это связано с неоднозначностью столбца, созданной default_scope
, присутствующей в модели, чтобы упорядочить ее по created_at
, который присутствует в обеих связанных таблицах.