使用这些关联只有放大结果返回正确的结果,但是当我尝试搜索第二个关联时,它将返回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,思维 - 狮身人面像作为一个插件v1.2.12和狮身人面像0.9.8
编辑:展望在生成的sql_query值显示第二个属性的连接使用错误的关联,因此它不会返回预期的结果。
简体结果:
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是你的问题。它应该将产品属性连接到产品两次。但是,在将键匹配到物镜直径时,它会使用错误的连接。再次,我觉得这源于您定义关联的方式。 – EmFi 2009-10-16 15:59:52
正如我上面提到的那样,正在生成的SQL来自Thinking Sphinx插件,当我将它添加到帖子中时,它是问题的根源。协会建设的方式没有错。 – Vizjerai 2009-10-16 18:42:36