完全に機能するSqueelを使用したこのコードがありました:
.where {
[
entry[:imdb].presence && imdb == entry[:imdb],
entry[:asin].presence && asin == entry[:asin],
entry[:upc].presence && dvd_upc.upc == entry[:upc]
].compact.reduce(:|)
}
これは、存在する場合にのみ列のクエリを作成し、entry[:variable_name]
存在しない場合は無視するため、非常に便利です。次のようなクエリを作成しました。
"SELECT * FROM `table` WHERE ((`table`.`imdb` = 3026824 OR `table`.`asin` = 'B00E5PHTR8'))"
このブロックの素晴らしいところは、変数が存在するかどうかを気にする必要がないことです。変数が 1 つしかない場合、クエリはOR
ステートメントを使用しません。大きな混乱を招くことなく条件文。
また、このクエリの要点は、変数が存在しない場合は使用しないことです。 column = NULL
を検索するcolumn = NULL
と、役に立たない間違ったヒットが大量に取得されます。
しかし、Squeel はもはやメンテナンスされておらず、ActiveRecord 4.1 (および Rails 4.1 の拡張機能) でさまざまな問題が発生しています。したがって、以上を使用したい場合に私が持っている唯一の選択肢は、私がAR 4.1.1
持っていたすべてのきしむクエリを取り除くことです。
私の質問は、AR.where
ブロックでこれを行うことは可能ですか? いいえ以外の答えが見つからないようです。不可能です。