我正在尝试在保存父记录后自动在子表中创建记录,但是我遇到了麻烦,需要帮助来执行此操作。
所以我的组织表层次结构就像组织->品牌->餐厅
(例如Americana(组织)-> KFC(品牌)->旧金山(餐厅))。
一个品牌有许多菜单,而菜单属于一个品牌。现在,我想从品牌菜单中级联每个餐厅的菜单,因为我想由餐厅管理价格。为了做到这一点,我创建了一个包含restaurant_id和menu_id的“ local_menus”表,这样我就不必重复某些数据,并且local_menus中的更改不会受到其父级的影响。
问题是,一旦创建父菜单,如何在“ local_menus”中自动创建记录。更具体地说,当我创建一个menuA时,需要为该品牌下的所有餐厅自动创建相同的菜单。感谢您的支持。
楷模:
class LocalMenu < ActiveRecord::Base
belongs_to :restaurant
belongs_to :menu
end
class Menu < ActiveRecord::Base
has_many :local_menus
belongs_to :brand
end
class Restaurant < ActiveRecord::Base
has_many :menus, through: :local_menus
end
表格:
local_menus
t.integer "restaurant_id", limit: 4
t.integer "menu_id", limit: 4
t.boolean "active_status", limit: 1
t.boolean "instock_status", limit: 1
t.integer "price", limit: 4
menus
t.integer "restaurant_id", limit: 4
t.string "name", limit: 255
t.integer "price", limit: 4
t.integer "brand_id", limit: 4
t.integer "category_id", limit: 4
t.text "description", limit: 65535
t.boolean "active_status", limit: 1
t.date "start_date"
t.date "end_date"
restaurants
t.string "name", limit: 255
t.string "name_kana", limit: 255
t.integer "price", limit: 4
t.boolean "active_status", limit: 1
t.integer "brand_id", limit: 4
最佳答案
一种方法是使用:after_create
回调为所有品牌餐厅创建本地菜单。
class Menu < ActiveRecord::Base
after_create: :build_local_menus_for_brand
def build_local_menus_for_brand
brand.restaurants.each do |restaurant|
self.local_menus.create!(restaurant_id: restaurant.id)
end
end
end