3

私はレールに慣れていないので、私の質問には簡単な答えがあるかもしれません。レール3.2.3を使用しています。データベースで検索を実行するための次のコードがあります。

@search_results = User.search("test search")

私のモデルのどこsearchで定義されていますか。@search_results = Data.search("test search")このコードは、開発環境のビューまたはコントローラーのいずれかにある場合に完全に機能します。本番環境では、ビューでは機能しますが、コントローラーでは機能しません。どうしてか分かりません。私の本番ログを見ると、ビューとコントローラーのSQLに大きな違いがあります。

クエリが本番環境のビューからのものである場合、これはログに表示されるものです。

SELECT 'users'.* FROM 'users' WHERE (concat(field1, ' ', field2, ' ', field3) LIKE '%test%' AND concat(field1, ' ', field2, ' ', field3) LIKE '%search%'

それがまさに私が望んでいることです。ただし、クエリがコントローラからのものである場合、SQLは次のようになります。

SELECT 'users'.* FROM 'users' WHERE (field1 LIKE '%test search%' OR field2 LIKE '%test search%' OR field3 LIKE '%test search%')

この変更を作成するために、実稼働環境のコントローラーが何をしているのかわかりません。

編集-search方法は次のとおりです。

def self.search(search)
  if search
    search_length = search.split.length
     find(:all, :conditions => [(["concat(field1, ' ', field2, ' ', field3) LIKE ?"] *        search_length).join(' AND ')] + search.split.map { |name| "%#{name}%" }) 
  else
    find(:all)
  end
end

私は本番環境と開発環境の両方でMySQLを使用しています。

4

1 に答える 1

0

2番目のクエリは、以前のバージョンの検索メソッドに基づいているように見えます。

Railsはそのようなクエリを簡単に作成しないので、おそらくそのクエリを生成している古いコードがどこかにあると思います。最新のコード変更を取得するために本番Railsアプリを再起動したことを確認し、正しいオブジェクトで正しいメソッドを呼び出していることを確認してください。

于 2012-10-30T06:15:39.733 に答える