是否有任何技巧可以在父级没有子级时创建默认子级,并且在父级有子级时不显示它? after_create 回调本身并不能解决问题。现在,如果用户创建了 3 个子级,并且您调用“parent.children”,则结果不仅包含这 3 个子级,还包含自动创建的子级。
更新:仅当没有其他 child 时,我才需要自动创建的 child ,并且当有其他 child 时,我不希望自动创建的 child 出现在“parent. children ”
示例:
我的产品型号有很多变体。客户可以订购一个变体,因此我们需要一个变体。但有时管理员不想添加变体,并认为没有变体的产品就足够了。所以我们需要一个默认变体来让客户订购。也许2个月后,管理员来添加一个变体,从这个时候开始,我们不再需要默认的了。我一直在寻找一个好的、干净的解决方案来解决这个问题
最佳答案
after_create
应该可以正常工作,假设您在保存父级之前关联了任何子级:
class ParentModel < ActiveRecord::Base
has_many :child_models
after_create :ensure_child_exists
def ensure_child_exists
child_models.create(default: true) unless child_models.exists?
end
end
如果您需要在稍后添加新子项时删除此子项,则需要在子项上有一个“默认”标志来识别删除,然后添加回调以触发默认子项删除.
class ChildModel < ActiveRecord::Base
attr_accessible :default
belongs_to :parent
after_create :remove_default_if_unneeded
scope :default, -> { where(default: true) }
def remove_default_if_unneeded
parent.child_models.default.destroy_all unless self.default?
end
end
关于ruby-on-rails - Rails 在父级没有子级时创建默认子级,而在父级有子级时不显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18718929/