プロが教える店舗&オフィスのセキュリティ対策術

RailsもMySQLも初心者です。
簡単な検索モデルを作っていますが、次のようなfindメソッドを使った検索の条件指定で、"name"の部分に複数の検索語句をor条件で指定することはできますか?

 @users = User.find(:all, :conditions => ["family_name LIKE ?", name])

検索対象は文字列です。
("name1" or "name2")とか("name1" || "name2")などとやってみたのですが、最初の検索語句しか認知してくれないようです。
もしできるのでしたら、:conditionsの部分をどのように書いたらいいか教えてください。

Railsのバージョンは1.1.2です。
よろしくお願いします。

※先ほど勘違いして同じ質問をいったん削除してしまいました。
 もしご覧になっていた方がいらしたら申し訳ありません。

A 回答 (1件)

最初の条件の文で、もし、nameに"%"が含まれていないなら



@users = User.find(:all, :conditions => ["family_name LIKE ?%", name])

のように"?"のあとに"%"をつけます。

それから、複数の条件を指定するなら以下のようにします。(以下はLIKEを使っていません)

@users = User.find(:all, :conditions => ["family_name = ? or family_name = ?", name1, name2])

"family_name = ?"を繰り返し記述するのが嫌なら、以下のような書き方もあります。

@users = User.find(:all, :conditions => ["family_name IN ( ? , ? )", name1, name2])

動作テストはしていませんが・・・。この検索条件については、データベースのSQL文法の本を購入されると、参考になります。
「現場で使えるSQL/翔泳社」などもいいかもしれません。

この回答への補足

すみません。補足質問のほうが大きくなってしまいますが、やりたいことはこうです。

検索対象カラムは5つあって、そのそれぞれに検索キーワードが0~複数個あり、それらは配列に入っています。
それらのキーワードを使って同一カラム内はor条件で、異なるカラム同士はand条件で検索し、結果をページネーションしたいのです。
つまり、条件部分はこんな感じです。
(↓この書き方でいいのか自信ないのですが・・)

@users = User.find(:all, :conditions => ["(id = ? or id = ? or id = ?) and (family_name = ? or family_name = ?)", id1, id2, id3, name1, name2])

ただし、配列に入っているキーワードの数はわかりません。

今はカラムごとに配列の要素ごとに検索して、結果を結合していますが、それではページネーションができません。
それぞれのカラムに対するキーワードの数が不明な場合、検索を行ってその結果をページネーションすることは可能でしょうか?

補足日時:2009/06/06 10:43
    • good
    • 0
この回答へのお礼

ありがとうございます。
複数の条件指定の最初のやり方は、and条件ではやっていましたが、or条件では試していませんでした。
質問の仕方が下手で申し訳ないのですが、やりたいことはもう少し複雑なので補足質問に書かせていただきます。

参考書まで紹介していただいてありがとうございました。

お礼日時:2009/06/06 10:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!