has_many アソシエーションを持つモデルがあります: Charts has_many ChartConditions
チャート モデルには次のフィールドがあります。
- 名前(タイトル)
- テーブル名 (モデル)
chart_conditions モデルには次のフィールドがあります。
- assoc_name (.join へ)
- 名前(列)
- 値 (値)
- 演算子 (演算子
基本的に、チャートは動的クエリを実行するモデルを (table_name フィールドを使用して) 示します。次に、Chart の chart_conditions は、そのモデルのどのフィールドでソートするかを教えてくれます。
したがって、照会されるモデルでは、複数の chart_conditions を使用して where 句を動的に構築する必要があります。
以下では、すべてのオブジェクトの assoc_name フィールドに基づいて最初に結合を行うことがわかります
私が思いついた例。これは機能しますが、名前/値の動的演算子では機能せず、非推奨の警告もスローされます。
def self.dynamic_query(object)
s = joins(object.map{|o| o.assoc_name.to_sym})
#WORKS BUT GIVES DEPRECATED WARNING (RAILS4)
object.each do |cond|
s = s.where(cond.assoc_name.pluralize.to_sym => {cond.name.to_sym => cond.value})
end
end
このクエリに動的演算子の値を追加するにはどうすればよいですか? また、なぜ言えないのですか:
s = s.where(cond.assoc_name.pluralize : {cond.name : cond.value})
=> と .to_sym を使用して動作させる必要があります。上記の構文エラー:構文エラー、予期しない ':' ...ere(cond.assoc_name.pluralize : {cond.name : cond.value}) ... ^