条件に基づいて結果を制限する動的メソッドをメタプログラミングする最良の方法に苦労しています...たとえば:
class Timeslip < ActiveRecord::Base
def self.by_car_trans(car, trans)
joins(:car)
.where("cars.trans IN (?) and cars.year IN (?) and cars.model ILIKE ?", trans, 1993..2002, car)
.order('et1320')
end
end
たとえば、引数を渡す代わりに、キーがフィールド名で、値がフィールド値である条件の配列を渡します。たとえば、次のようにします。
[["field", "value", "operator"],["field", "value", "operator"]] を渡します
def self.using_conditions(conditions)
joins(:car)
conditions.each do |key, value|
where("cars.#{key} #{operator} ?", value)
end
end
しかし、それは機能せず、あまり柔軟ではありません...値が配列であるかどうかを検出し、= ではなく IN () を使用し、大文字と小文字を区別しないために ILIKE を使用できることを望んでいました条件も…
アドバイスをいただければ幸いです。ここでの私の主な目標は、ユーザーが動的に条件を作成し、将来の使用のためにそのリストを保存できる「リスト」モデルを作成することです。このリストは、関連付けられた車のテーブルに基づいてタイムスリップ モデルをフィルター処理します...もっと簡単な方法があるのではないでしょうか?