1

在以下“百货商店模式”中,我有三个模型:

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

4

0 回答 0