2017-04-23 2 views
0

私はこの問題を完全に突きつけています。疑いのある答えは見つけられません。Rails/PSQL - 列テーブルを配列に変換し、サブアレイが含まれているかどうかを調べる

私は可能な限り最良の方法で説明しようとしますが、それはかなり難しいです。

私は最初のモデル(レシピ)を持っています。これは、配列内のすべての成分をカラムの成分の中に保存します。 Ingredientsモデルもあります。これはJoinテーブルを介してレシピに接続されています。レシピには、使用可能なすべての成分の名前が最初の列に表示されます。

私は、検索メソッドの中にingredients.nameカラムを配列に変換し、検索メソッドから、ingredients.name配列に完全に含まれる成分の配列を持つレシピだけを返すクエリを追加したいと思います。

私はこの

recipes = recipes.joins(:ingrediantizations).where('array_agg('ingredients.name') @> recipe.ingredients') 

と試みたが、それは正しいresusltを与えていない - ingrediantizationsが参加した表です。

あなたが私を助けることを願っています!

答えて

0

私の頭をこの周りに巻きつけてから、私はついに解決に達しました。

誰かが恩恵を受けることができるよう投稿します。

2番目のステップは奇妙に思えるかもしれませんが、PSQLのリテラル配列に必要なように、中括弧で配列を作成する唯一の方法です。

成分は、成分をアレイに保存する属性であった。

items = Item.pluck(:name) 
    items = "{#{ items.map {|term| %Q("#{ term }") }.join(",") }}" 
    recipes=recipes.where("ingredients <@?", "#{items}")