私の質問はこれに似ていますが、私の特定の問題に対処する回答はありません。
次のようなオブジェクトを見つけたい:
conditions = {first_name: @search OR last_name: @search}
Stuff.where( conditions )
明らかに、この構文は無効ですが、やりたいことを示す最も簡単な方法です。複合/複合条件でよりクリーンなハッシュ構文を使用したい。
このような「純粋な文字列条件」を使用して手で書き出すことができることは知っていますStuff.where("first_name=#{@search} OR last_name=#{@search}")
が、これは私が知りたいことではありません。
更新次のような配列で OR を実行できるようですStuff.where( some_column: ["option1", "option2"])
。これは知っておくと非常に便利ですが、別の key=value ペアに適用するには OR が必要なため、問題は解決しません...key=value OR key=value
ではありませんkey=value OR value
。
Update2 SQL文字列を使用したくない理由は、クエリをいくつかの部分に分けて作成する必要があり、挿入された変数をエスケープしながらそれを行う方法がわからないためです。私はテストしていませんが、これはうまくいかないと思います:
conditions = ["(project_id=? AND sent_to_api=1)", @project_id]
conditions = conditions + ["first_name=? OR last_name=?", @search, @search]
Stuff.where( conditions )
うまくいけば、これは理にかなっています。Rails のビルトイン SQL エスケープを維持しながら、SQL 文字列構文で必要なことを行う方法はありますか?