2012-02-24 4 views
2

Для начала, производственная сторона вещей работает очень хорошо, только когда я запускаю тесты, которые возникают в результате ошибок.Тестирование мышления Сфинкса с act_as_taggable_on Запрос на ошибочные имена таблиц

Как указано в названии, я использую Thinking Sphinx с эффектом act_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') 

Как вам можно увидеть, что запрос пытается найти таблицу «kitchen_taggings_specials» вместо таблицы тегов.

Я перестраиваю индексы как в dev, так и при каждом изменении индекса.

Как я уже сказал, производственные и опытно-конструкторские работы просто прекрасны, только когда я выполняю свои тесты.

+0

Какие версии TS и Rails вы используете? – pat

+0

Мышление Sphinx: 2.0.5, Rails 3.2.1, Sphinx 2.0.3. Эта проблема существовала и в Rails 3.1.x – samullen

+0

Можете ли вы попробовать TS 2.0.11? В версии 2.0.8 были зафиксированы некоторые исправления для действий-как-taggable-on. – pat

ответ

3

Интересно, связано ли это с тем, что полиморфные данные не заполняются, когда тестовая среда генерирует конфигурацию. Как вы проводите тесты? Огурец, прямая Капибара или что-то еще?

После того, как вы добавили некоторые данные, попробуйте регенерирующим конфигурацию, а затем индексирование:

ThinkingSphinx::Test.stop # if sphinx is already running? 
ThinkingSphinx::Test.start # this generates config, indexes, and starts Sphinx. 

Конечно, это не полезно, если ошибка происходит за пределами вашей установки ... Отсюда первый вопрос :)

+0

Пэт, я использую «ThinkingSphinx :: Test.index * model.sphinx_index_names» на этапе огурца a la your blog post. Я попробовал это. Это все еще не работает. – samullen

+0

Pat, я вижу блок кода, связанный с SQL-перепиской в ​​файле association.rb. Есть ли причина, почему это не будет выполнено в тестовой среде? – samullen

+0

'ThinkingSphinx :: Text.index' не будет перезаписывать конфигурационный файл, и если это полиморфное объединение, важно, чтобы там были данные, поэтому ThinkingSphinx знает, с какими таблицами он может присоединиться. Следовательно, работайте над тем, что я изложил выше. – pat