1
ActiveRecordを使い始める前に、特定のクエリを実行する方法を理解してください。材料のリストを入力し、それらの材料をレシピにマッチさせることと同等のものです。良いスキーマはどのように見え、このようなことがどうなるでしょうか?このactiverecordクエリを作成/最適化する方法は?
UPDATE:
私はこれまでのところ私はhas_and_belongs_to_manyアソシエーションの関係で結ばれた2つのモデル - 食材とレシピを持って、それをやっているので、どのように。私は説明した出力を得るために次のコードを使用していますが、あまりにも迂回しすぎているようです。誰かが単一のクエリでこれを最適化/取得する方法について何らかの洞察を提供できれば、素晴らしいものになるでしょう。
recipes = []
ingredients = ['i2', 'i1']
Recipe.uniq.joins(:ingredients).where("ingredients.name in (?)", ingredients).each do |recipe|
included_ingredients = recipe.ingredients.take_while { |i| ingredients.include?(i.name) }
recipes << recipe if recipe.ingredients.size == included_ingredients.size
end
マイナーポイント:*テーブル*は小文字(「レシピ」など)で、モデルは大文字と単数(「レシピ」など)です。また、結合表はアルファベット順であるため、デフォルトは 'ingredients_recipes'です。 – nickgrim
@nickgrimの変更が加えられました。 –
実行中: 'IngredientsRecipes.joins(:recipe、:ingredients).where(" ingredients.name =? "、['i2'、 'i1'])allはエラーです(ただし、配列と単なる一意の名前です)。エラー:ActiveRecord :: StatementInvalid:PGError:ERROR:WHEREの型はブール型でなければならず、レコードは入力しないでください –