在以下“百货商店模式”中,我有三种模式:
class Store
has_many :items, inverse_of: :store, autosave: true
has_many :departments, inverse_of: :store, autosave: true
accepts_nested_attributes_for :departments, allow_destroy: true
class Department
belongs_to :store, inverse_of: :departments
has_many :items, autosave: true, inverse_of: department
accepts_nested_attributes_for :items, allow_destroy: true
class Item
belongs_to :store, inverse_of: :items
belongs_to :department, inverse_of: :items
当我尝试以下操作时:
store = Store.new
department = store.departments.build
item = department.items.build
store.save
然后该项目与商店无关。
我对此问题的解决方案是将以下内容添加到Item模型中:
class Item
before_validation :capture_store_info
def capture_store_info
self.store = self.department.store
end
我将它添加到before_validation回调中,因为在我的非平凡代码中,我有一堆验证,包括检查商店模型是否存在的验证。
问题:我的解决方案有效,但是解决这个问题的方法是正确的(即Rails常规方法)吗?有没有更好的解决方案。这感觉有点脏,每次我在Rails中做了一些感觉“有点脏”的东西,它后来又回来咬我了。
谢谢, JB