С этими ассоциациями только результаты увеличения возвращают правильные результаты, но когда я попытаюсь найти вторую ассоциацию, она вернет 0 результатов.Как искать различные условия из одной таблицы соединений?
has_one :magnification,
:class_name => 'ProductAttribute',
:foreign_key => 'product_id',
:conditions => {:key => 'Magnification'}
has_one :objective_lens,
:class_name => 'ProductAttribute',
:foreign_key => 'product_id',
:conditions => {:key => 'Objective Lens Diameter'}
define_index do
has magnification(:value), :type => :float, :as => :magnification
has objective_lens(:value), :type => :float, :as => :objective_lens_diameter
end
Пример кода Используется
# returns expected results
Product.search(nil, :with => {:magnification => (8.0..9.0)})
# returns 0 results
Product.search(nil, :with => {:objective_lens_diameter => (31.0..61.0)})
Но когда я обратный порядок define_index наоборот происходит. Таким образом, результаты объективного диаметра линзы возвращают правильные результаты и возвращает увеличение приводит 0.
Использования Rails v2.2, мышление-Sphinx как плагин v1.2.12 и Сфинкс 0.9.8
Edit: Глядя при генерируемом значении sql_query показано, что соединение 2-го атрибута использует неправильные ассоциации, чтобы оно не возвращало ожидаемые результаты.
упрощенный результаты:
SELECT
`products`.`id` * 2 + 1 AS `id`,
`products`.`id` AS `sphinx_internal_id`,
1234567890 AS `class_crc`,
`product_attributes`.`value` AS `magnification`,
`objective_lens_products`.`value` AS `objective_lens_diameter`
FROM `products`
LEFT OUTER JOIN `product_attributes` ON product_attributes.product_id = products.id
AND `product_attributes`.`key` = 'Magnification'
LEFT OUTER JOIN `product_attributes` objective_lens_products ON objective_lens_products.product_id = products.id
AND `product_attributes`.`key` = 'Objective Lens Diameter'
WHERE `products`.`id` >= $start
AND `products`.`id` <= $end
GROUP BY `products`.`id`
ORDER BY NULL
Этот SQL является вашей проблемой. Он соединяет атрибуты продукта с продуктами дважды, как и должно. Но он использует неправильное соединение при сопоставлении ключа с Objective Lens Diameter. Опять же, я чувствую, что это связано с тем, как вы определили свои ассоциации. – EmFi
SQL, который генерируется, происходит из плагина Thinking Sphinx, как я уже отмечал выше, когда добавлял его в сообщение, что он был источником проблемы. Нет ничего плохого в том, как были построены ассоциации. – Vizjerai