1

アプリをRails2からRails3にアップグレード中です。
Rails2アプリはsearchlogicを多用しています。
グーグルした後、searchlogicはRails3と互換性がなく、代わりにmeta_searchを使用する必要があることがわかりました。

しかし、私はsearchlogicに対するmeta_searchの使用法を完全には理解していません。

:nameフィールドと:addressフィールドを持つUserモデルがある場合、meta_searchで次のメソッドを使用できません。私は何が間違っているのですか?

ruby-1.9.2-p0 > User.name_null  
NoMethodError: undefined method `name_null' for #<Class:0x000000038d5ce0>
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/base.rb:1008:in `method_missing'
from (irb):7
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:44:in `start'  
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:8:in `start'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

User.user_id_eq(1)やUser.name_equals( "Blah")のようなメソッドはどれも機能していません。私はまだmeta_searchの使い方を理解していないと思います!

参照:
meta_search https://github.com/ernie/meta_search

4

2 に答える 2

1

メソッドは、FormBuilderで設定される属性です。そのため、user_name_equals( "Bob")ではなく、user_name_equals="Bob"を呼び出す必要があります。また、モデル自体ではなく、検索インスタンスに配置されます。

@search = User.search(:user_name_eq => "Bob")

日常のクエリ構築で使用するものを探している場合は、代わりにMetaWhereを試してください。http://metautonomo.us/projects/metawhere

于 2010-11-30T12:47:35.553 に答える
1

Rails 3と互換性があるように見えるrd_searchlogicに注目してください。ただし、この記事の執筆時点ではまだプレビューです。

編集

このSOスレッドで説明されているように、次の方法でインストールします。

  gem 'rd_searchlogic', :require => 'searchlogic', :git => 'git://github.com/railsdog/searchlogic.git'
于 2010-12-01T00:38:24.380 に答える