簡體   English   中英

Rails與連接表的多態關聯

[英]Rails polymorphic association with connection table

我有一張叫菜譜的桌子,另一張叫食材的桌子。 配料可以連接到食物或食譜(一個食譜可以包含其他食譜)。 我已經在食物中實現了它,但是我不確定如何在食譜中實現它。 我創建了另一個表,稱為表的食物部分,該表名為配方_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我無法在沒有recipe_as_ingredients連接表的情況下連接配方,因為它使保存記錄成為不可能,因為配方既是主記錄又是明細記錄,並且id字段始終為nil。

你好親近

移動:has_many:ingredients,:as =>:element

進入配方模型。

RecipeAsIngrident應該存在。 如果要獲取食譜中使用的所有食物,則需要Recipe上的函數來匯總后代。 這將是計算得出的總數,因此您不需要回調即可更新總數等,但是我會添加邏輯以防止刪除用於其他用途的配方。

詢問是否需要更多說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM