私はactive_adminを使用しており、それが私のプロジェクトにmeta_searchをもたらしています。(これは他の目的には使用したくない)。
すべてのモデルで検索方法を定義しているようです。つまり、タイヤを含めると、その検索方法を使用できなくなります。
メソッドの定義方法にも奇妙なことがあるようです--method_defined?検索メソッドが定義されていないことを示していますが、それを呼び出すと、meta_searchが取得されます。クラスで独自の検索メソッドを定義しても、Document.searchを呼び出すと、meta_searchが取得されます。
編集:私はこの種のものを扱う一般的な方法に興味があります-私はModel.tire.searchを使用してこの特定の問題を解決しました(タイヤもその方法でアクセスできるため)、しかし私はまだその宝石が嫌いですm使用していなくても、プロジェクトの残りの部分で回避策を使用せざるを得なくなる可能性があります。
編集:回答への回答にコードブロックを含める良い方法がわからないので、ここに配置します。
# Meta_search loaded, tire is not
1.9.3p125 :001 > require "tire" #=> true
1.9.3p125 :002 > Document.send(:include, Tire::Model::Search)
=> Document(...)
1.9.3p125 :003 > Document.search
Document Load (2.1ms) SELECT "documents".* FROM "documents"
# I get meta_search, as I should
# Tire loaded (and the include Tire::Model::Search is inside the class definition), meta_search is not loaded
1.9.3p125 :001 > Document.search
# I get tire, as I should
1.9.3p125 :002 > require "meta_search" #=> true
1.9.3p125 :003 > Document.search
# I still get tire, all is well
# Tire loaded, meta_search is not loaded
1.9.3p125 :001 > require "meta_search" #=> true
1.9.3p125 :002 > Document.search
Document Load (1.8ms) SELECT "documents".* FROM "documents"
# I get meta_search, even though Document.search was already defined!
# Tire loaded, meta_search is not loaded, RAILS_ENV="production"
Loading production environment (Rails 3.2.2)
1.9.3p125 :001 > require "meta_search"
=> true
1.9.3p125 :002 > Document.search
# I get tire!
これについての私の解釈は、クラスが実際にロードされていないときに、検索がすでに定義されているかどうかをmeta_searchが検出する方法にバグがあるということです。やったー!