0

ブール値を持つハッシュがあります

({"u25" => true, "f26t49" => true, "o50" => true, ..}); 

全部で 19 個のブール値があり、データベース内のテーブルでこれらをチェックし、それらのデータ セットを取得したいのですが、少なくとも 1 つの一致が必要です。私はそれを試してみました

「Model.all(:条件 => ハッシュ)」または「Model.where(ハッシュ)」

しかし、そこでクエリを取得します

「..u25 == true AND f26t49 == true AND o50 == true...」

しかし、私はこのようなものが必要です:

「..u25 == true または f26t49 == true...」

あなたが私を助けてくれることを願っています!

添加:

回避策を作成して、ハッシュからクエリ文字列を生成しようとしました。この文字列を直接書くと (m = Model.where("u25 == 't'")) 動作しますが、変数を渡すと

@query = '"u25 == ' + "'t'" + '"'

m = Model.where(@query)

mよりもnilです!

4

1 に答える 1

1

あなたの回避策はあなたを正しい方向に導いたと思います。これが私がすることです:

# model.rb
def self.search_with_conditions(hash)
  query = hash.map{|k,v| "#{k} == #{v}"}.join(' OR ')
  where(query)
end

次に、コントローラーで次のように呼び出します。

m = Model.search_with_conditions(hash)

補足: これは、true の値として 1 を使用するものがあるため、一部の DB では機能し、他の DB では機能しない場合があります。また、これを試す時間がなかったので、その状態でいくつかの引用符が欠落している可能性があります. 私はそれができると思います'#{v}'

編集:Railsについてもう少し学んだ後、ここに免責事項を追加する必要があります:

文字列 k または v がユーザー入力の一部である場合、このアプローチは SQL インジェクションの影響を受けやすくなります。この方法は注意して使用してください。

于 2012-04-09T23:53:17.797 に答える