2017-04-23 48 views
0

我完全停留在這個問題上,我無法找到任何答案。Rails/PSQL - 將列表轉換爲數組並搜索是否包含子數組

我會盡量以最好的方式解釋,但這很難。

因此,我有第一個模型(食譜),它存儲了列內所有成分內的成分。我也有一個成分模型,它通過一個連接表連接到配方,它有第一列所有可用成分的名稱。

我想在我的搜索方法中包含一個查詢,將ingredients.name列轉換爲數組,並從搜索方法返回僅返回配料數組完全包含在ingredients.name數組中的食譜。

我試着用這個

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

但它不能做出正確的resuslt - ingrediantizations是連接表。

希望你能幫助我!

回答

0

經過幾天的包紮,我終於找到了解決辦法。

我發佈它,讓有人可以受益。

第二步可能看起來很奇怪,但我猜,它是使用大括號創建數組的唯一方法,正如PSQL中的文字數組所需。

成分是存儲數組中的成分的屬性。

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