1

完全に機能する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ブロックでこれを行うことは可能ですか? いいえ以外の答えが見つからないようです。不可能です。

4

2 に答える 2