1

単純な検索フォームに関する Railscast を見たばかりで、アプリでそのようなことをしたいのですが、完全に一致する結果だけを見つけたくありません。

Project次のフィールドで名前が付けられたモデルがあります。

  • name
  • description
  • keyword1、 と
  • keyword2.

Railscast から取得したコードを考えると、次のようになります。

models/project.rb

def self.search(search)
    if search
        find( :all, :conditions => ['name LIKE ?', "%#{search}%"] )
    else
        find(:all)
    end
end

"Pizza" を検索したい場合、"Master Pizza Project" という名前のプロジェクトを、keyword1 => "MasterPizza" および keyword2 => "Pizza" と一致させたい場合、上記のコードをどのようにリファクタリングすればよいでしょうか?

また、大文字と小文字の区別は問題ですか?

4

4 に答える 4

0

私はあなたのqを完全には理解していませんが、これが理にかなっていることを願っています:

def self.search(search)
    if search
     where('title LIKE ? OR keyword1 LIKE ? OR keyword2 LIKE ?',"%#{search}%", "%#{search}%","%#{search}%")
    # find(:all, :conditions => ['title LIKE ?', "%#{search}%"])
    else
      all
    end
  end    
于 2012-02-08T23:32:06.640 に答える
0

クエリをアトムに分割し、各アトムを個別のクエリとして実行してから、各アトムの結果をマージする必要があります。

この時点で、事態はかなり複雑になってきています。これらすべてを処理してくれるActs as Indexedなどの検索ライブラリを使用することをお勧めします。

[開示] 私は Acts as Indexed の著者です。

于 2011-05-30T20:18:00.580 に答える
0

Ryan Bates が Sphinx を利用して全文検索を行うことについて話している別のレールキャストがあります。最初から物事を行うのではなく、このようなアプローチを強くお勧めします。

http://railscasts.com/episodes/120-thinking-sphinx

于 2011-05-30T20:15:44.683 に答える
0

MetasearchMetawhereの gem をチェックしてください。

于 2011-05-30T20:24:12.857 に答える