首先,生产方面的工作很好,只有当我运行测试时才会出现错误。
正如标题中所说,我使用的是思维狮身人面像和acts_As_taggle宝石。以下是我使用的模型中的一些片段:
class Special < ActiveRecord::Base
acts_as_taggable
acts_as_taggable_on :cuisines, :meals
...
define_index do
...
indexes cuisine_taggings.tag(:name), :as => :cuisine_tags, :facet => true
indexes meal_taggings.tag(:name), :as => :meal_tags
...
end
...
end
搜索看起来像这样:
Special.search("some query", {
:conditions => {:meal_tags => "dinner"} ,
:geo => coordinates,
:retry_stale => true,
:with => {
"@geodist" => 0.0..distance,
:timeframe => [1,2],
},
:page => page,
:per_page => Kaminari.config.default_per_page,
:order => "#{day} desc, @relevance DESC, @geodist ASC"
}
我看到的错误是:
Mysql2::Error: Unknown column 'cuisine_taggings_specials.context' in 'where clause': SELECT `taggings`.`id` AS t0_r0, `taggings`.`tag_id` AS t0_r1, `taggings`.`taggable_id` AS t0_r2, `taggings`.`taggable_type` AS t0_r3, `taggings`.`tagger_id` AS t0_r4, `taggings`.`tagger_type` AS t0_r5, `taggings`.`context` AS t0_r6, `taggings`.`created_at` AS t0_r7, `tags`.`id` AS t1_r0, `tags`.`name` AS t1_r1 FROM `taggings` LEFT OUTER JOIN `tags` ON `tags`.`id` = `taggings`.`tag_id` WHERE `taggings`.`taggable_id` = 1 AND `taggings`.`taggable_type` = 'Special' AND (`cuisine_taggings_specials`.context = 'cuisines')
正如您所看到的,查询试图定位"cuisine_taggins_specials"表,而不仅仅是tagings表。
每当我更改索引时,我都会在dev和test中重新构建索引。
就像我说的,生产和开发工作很好,只有在我运行测试的时候。
我想知道这是否与测试环境生成配置时未填充的多态数据有关。你是如何进行测试的?黄瓜,水豚,还是别的?
添加了一些数据后,请尝试重新生成配置,然后进行索引:
ThinkingSphinx::Test.stop # if sphinx is already running?
ThinkingSphinx::Test.start # this generates config, indexes, and starts Sphinx.
当然,如果错误发生在您的设置之外,这是没有帮助的。。。因此,第一个问题是:)