2

2つの着信パラメータを使用して動的SQLキューを構築する必要があります。両方のパラメータを定義すると簡単です。

MyClass.where(:column1 => param[:first], :column2 => params[:second])

しかし、たとえばparam[:first] = 0、この列のすべての(nullではない)フィールドを選択したい場合(したがって、両方のパラメーターが= 0の場合、はに等しくなりますselect * from tablename)。この構文を試しました:

MyClass.where(:column1 => param[:first], :column2 => !nil)

しかし、それは私に間違った出力を与えます。これをエレガントに解決する方法について何か提案はありますか?

4

3 に答える 3

2

?:内部で演算子を使用できますwhere

MyClass.where(params[:first] ? {:column1 => params[:first]} : "column1 IS NOT NULL")
       .where(params[:second] ? {:column2 => params[:second]} : "column2 IS NOT NULL")
于 2012-07-02T15:16:44.467 に答える
1

どうMyClass.where('column1 IS NOT NULL AND column2 IS NOT NULL').where({:column1 => params[:first], :column2 => params[:second]}.delete_if{|k,v| v.nil?})ですか?

于 2012-07-02T15:09:08.033 に答える
1

これは私が見つけたものからうまくいくかもしれないと思います。Railsコンソールで機能しているようで、アクティブレコードを考慮するとアクティブチェーンが可能になります。

MyClass.where(:column1 => params[:first], :column2 => params[:second]).where("column1 is NOT NULL").where("column2 is NOT NULL")
于 2012-07-02T15:09:24.200 に答える