2015-04-22 2 views
1

У меня есть приложение с 4 различными моделями, которые многозадачи, однако они были первоначально настроены с помощью pg_search_scope; то есть:PgSearch 1.0.0 бросает ошибку ModelNotMultisearchable при попытке перестроить с консоли

class Episode < ActiveRecord::Base 
    include PgSearch 
    # multisearchable :against => [:title, :description] 

    pg_search_scope :search_text, 
    :against => [:title, :description], 
    :using => { 
       :tsearch => {:prefix => true} 
       } 

Как вы можете видеть в какой-то момент, я попытался настроить это на многоуровневый путь.

В последнее время есть предметы, которые, как мы знаем, должны возвращаться, которые НЕ находятся в результатах поиска, и я подумал, что мне придется перестроить pg_search_documents; однако, что бросает ошибку:

irb(main):004:0> PgSearch::Multisearch.rebuild(Show) 
PgSearch::Multisearch::ModelNotMultisearchable: PgSearch::Multisearch::ModelNotMultisearchable 
    from /app/vendor/bundle/ruby/2.0.0/gems/pg_search-0.7.3/lib/pg_search/multisearch/rebuilder.rb:6:in `initialize' 
    from /app/vendor/bundle/ruby/2.0.0/gems/pg_search-0.7.3/lib/pg_search/multisearch.rb:10:in `new' 
    from /app/vendor/bundle/ruby/2.0.0/gems/pg_search-0.7.3/lib/pg_search/multisearch.rb:10:in `block in rebuild' 
    from /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `block in transaction' 
    from /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:210:in `within_new_transaction' 
    from /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `transaction' 
    from /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.2/lib/active_record/transactions.rb:209:in `transaction' 
    from /app/vendor/bundle/ruby/2.0.0/gems/pg_search-0.7.3/lib/pg_search/multisearch.rb:8:in `rebuild' 
    from (irb):4 
    from /app/vendor/bundle/ruby/2.0.0/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in `start' 
    from /app/vendor/bundle/ruby/2.0.0/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in `start' 
    from /app/vendor/bundle/ruby/2.0.0/gems/railties-4.0.2/lib/rails/commands.rb:62:in `<top (required)>' 
    from /app/bin/rails:4:in `require' 
    from /app/bin/rails:4:in `<main>' 
irb(main):005:0> 

Я думал, что это может быть из-за установки в качестве pg_search_scope, поэтому я один класс, как описано выше с Multisearch: multisearchable: против => [: название,: описание] - но даже тогда я получаю проблемы с перестройкой.

Я попытался ручным способом удаления из таблицы pg_search и восстановления, но даже то, что бросает ошибку:

2.1.0 :010 > Show.find_each{ |record| record.update_pg_search_document } 
    Show Load (4.8ms) SELECT "shows".* FROM "shows" ORDER BY "shows"."id" ASC LIMIT 1000 
NoMethodError: undefined method `update_pg_search_document' for #<Show:0x007fd945a92358> 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activemodel-4.0.2/lib/active_model/attribute_methods.rb:439:in `method_missing' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/attribute_methods.rb:155:in `method_missing' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/acts_as_follower-0.2.1/lib/acts_as_follower/followable.rb:54:in `method_missing' 
    from (irb):10:in `block in irb_binding' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/relation/batches.rb:26:in `block (2 levels) in find_each' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/relation/batches.rb:26:in `each' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/relation/batches.rb:26:in `block in find_each' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/relation/batches.rb:75:in `find_in_batches' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/relation.rb:70:in `find_in_batches' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/relation/batches.rb:25:in `find_each' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.2/lib/active_record/querying.rb:8:in `find_each' 
    from (irb):10 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in `start' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in `start' 
    from /Users/grimm/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands.rb:62:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4 

ответ

0

Я получаю ту же ошибку при попытке восстановить (в первый раз, установка) через командную строку Rails с PgSearch::Multisearch.rebuild(Professor). Что работает для меня вместо восстановления из командной строки с помощью the alternative approach рекомендуется на Github:

rake pg_search:multisearch:rebuild[Professor]

Это похоже на работу для меня - это не выдаст ошибку, и когда я иду в Rails консоль после и запускает PgSearch.multisearch("query"), он возвращает результат, тогда как перед возвратом ошибки.

Я знаю, что это не исправление, но это решение непосредственной проблемы. Я надеюсь, что это поможет - публикация проблемы на их Github может привести к более полному исправлению.

+0

К сожалению, не для меня - я получаю шоу не многоразовый. См. PgSearch :: ClassMethods # multisearchable. – grimmwerks

+0

Итак, вы пытаетесь «PgSearch :: Multisearch.rebuild (Show)», но модель, которую вы положили «include PgSearch» и «multisearchable: против => [: title,: description]' in is 'Episode' - - Кажется, вы пытаетесь перестроиться на неправильной модели? Попробуйте поместить эти две строки (в отличие от измененных, конечно) в вашу модель «Показать» и повторить попытку. –

Смежные вопросы