0
Я хочу, чтобы загрузить коллекцию ActiveRecord с соответствующей коллекцией усердия:Заказав has_many через ассоциацию
class BodyPort < ActiveRecord::Base
has_many :body_port_dimensions
has_many :dimensions, through: :body_port_dimensions, order: 'dimensions.value'
scope :ordered, order('name ASC')
end
class BodyPortDimension < ActiveRecord::Base
belongs_to :dimension
end
class Dimension < ActiveRecord::Base
end
нетерпеливыми загрузками ассоциации:
BodyPort.includes(:dimensions).ordered
генерирует SQL:
SELECT `body_ports`.*
FROM `body_ports`
ORDER BY name ASC
SELECT `body_port_dimensions`.*
FROM `body_port_dimensions`
WHERE `body_port_dimensions`.`body_port_id` IN (3, 5, 7, 6, 2, 8, 9, 4, 1)
ORDER BY dimensions.value
, который вызывает исключение SQL:
=> ActiveRecord::StatementInvalid: Mysql2::Error:
Unknown column 'dimensions.value' in 'order clause':
SELECT `body_port_dimensions`.*
FROM `body_port_dimensions`
WHERE `body_port_dimensions`.`body_port_id` IN (3, 5, 7, 6, 2, 8, 9, 4, 1)
ORDER BY dimensions.value
Как создать внутреннее соединение SQL, как вместо того, чтобы:
SELECT `dimensions`.*
FROM `dimensions`
INNER JOIN `body_port_dimensions`
ON `dimensions`.`id` = `body_port_dimensions`.`dimension_id`
WHERE `body_port_dimensions`.`body_port_id` IN (3, 5, 7, 6, 2, 8, 9, 4, 1)
ORDER BY dimensions.value
Это похоже на известную (и исправленную в рельсах 4) ошибку с версией рельсов, которую вы используете: https://github.com/rails/rails/issues/8663 – FaithoftheFallen