2015-04-22 60 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模型中,然後重試。 –