2015-04-22 62 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

可悲的不是我 - 我得到的Show不是多可分的。请参阅PgSearch :: ClassMethods#multisearchable。 – grimmwerks

+0

所以你正在尝试'PgSearch :: Multisearch.rebuild(Show)',但是你放入''PgSearch'和'multisarchable:against => [:title,:description]'的模型是'Episode' - - 好像你正试图在错误的模型上重建?尝试将这两行(当然是反对更改)放在Show模型中,然后重试。 –