0

ドロップダウンメニューが追加されたときに条件を追加する SQL クエリを Rails アプリで作成したいと考えています。明らかに、ドロップダウンが選択されていない場合、空の条件で検索したくありません。SQL ステートメントで動的条件を作成するにはどうすればよいですか?

テストされていない例:

ドロップダウンが選択されていない場合: Object.find("billy," :conditions => {})

ドロップダウンを選択した場合: Object.find("billy," :conditions => {"last_name => "johnson"})

ご意見ありがとうございます。

4

4 に答える 4

5

何をしているのかよくわかりませんが、これを実現する一般的な方法は、ドロップダウンの値 (表示されているテキストではない) を選択したいオブジェクトの ID にすることです。選択がない場合は、次のようなものを使用できます。

last_name = unless params[:object][:last_name]

conditions = []
conditions << "last_name = ?" unless last_name.blank?
conditions << last_name unless last_name.blank?

Object.find("billy", :conditions => conditions)

メソッドとその適切な使用方法の詳細については、このリンクを参照してください。ActiveRecord::Base.find()また、この優れたガイドを参照して、SQL インジェクション攻撃から身を守る方法を学んでください。

編集 1:よりクリーンになるようにコードを修正しました。この方法には、個別の条件を簡単に追加できるという利点もあります。「something = ?」をすべて追加するようにしてください。関連する値 (param) を追加する前に。

編集 2: selectform helperを見たことがない場合は、ドロップダウンに使用することを検討してください。生活がずっと楽になります:-)

于 2009-06-09T13:36:01.420 に答える
1

もしかしてこれ?

Object.find("billy", :conditions => last_name.nil? ? {} : {:last_name => last_name})
于 2009-06-09T13:34:35.073 に答える
0

そのためにSmartTupleを使用しています。シンプルですが、「条件付き条件」を構築するための体系的なアプローチを提供します。

于 2010-07-23T18:50:57.063 に答える