0

レシピと呼ばれるテーブルと、材料と呼ばれる別のテーブルがあります。材料は、食品またはレシピに接続できます (1 つのレシピに他のレシピを含めることができます)。食べ物の部分で実装しましたが、レシピの部分を実装する方法がわかりません。現在のレシピで食材として選択されたレシピでレシピを保存するときに、このテーブルにデータを入力する必要がある、recipe_as_ingredients という名前の別のテーブルを作成しました。おそらく、保存するたびにテーブルを更新し、レシピで削除された場合は手動で行を削除する必要があります。それを実装するより良い方法はありますか?

モデルは次のとおりです。

class Recipe < ActiveRecord::Base
  has_many :ingredients
end

class Ingredient < ActiveRecord::Base
  belongs_to :element, :polymorphic => true
  belongs_to :recipe
end

class Food < ActiveRecord::Base
  has_many :ingredients, :as => :element
end

class RecipeAsIngredient < ActiveRecord::Base
  has_many :ingredients, :as => :element
end

保存する前に関数で要素タイプを手動で設定したので、レシピを原料と同様にする必要がありますが、recipe_as_ingredient に原料に接続するためのレコードが含まれていることを確認してください。

self.element_id = numid.id
self.element_type = 'Food'

psレシピはマスターレコードと詳細レコードの両方であり、idフィールドは常にnilだったため、レコードの保存が不可能になったため、recipe_as_ingredients接続テーブルなしでレシピを接続できませんでした。

4

1 に答える 1

0

あなたはとても近いです。

Move: has_many :ingredients, :as => :element

レシピモデルに。

RecipeAsIngrident が存在する必要があります。レシピで使用されているすべての食品を取得する場合は、子孫を合計する Recipe の関数が必要です。これは計算された合計であるため、合計を更新するためのコールバックは必要ありませんが、他の目的で使用されるレシピが削除されないようにするロジックを追加します。

さらに説明が必要かどうか尋ねます。

于 2012-08-26T22:30:03.723 に答える