在以下“百货商店模式”中,我有三个模型:
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