我有一个嵌套的表单,在更新时,会为所有嵌套的属性创建重复的条目。为了防止这种情况,我想对reject_if
使用accepts_nested_attributes
选项。代码可能如下所示:
accepts_nested_attributes_for :implicants, :reject_if => lambda { |a| a.is_a_duplicate? }
不幸的是,a
这里是一个ActionController :: Parameter,而不是我正在使用的类的实例。我试过这个:
accepts_nested_attributes_for :implicants, :reject_if => lambda { |a| self.is_a_duplicate?(a) }
但这会导致对类的调用,而不是实例。有没有办法从reject_if
lambda中引用实例?
答案 0 :(得分:1)
我认为这不是:reject_if
应该负责的事情。 :reject_if
是出于非常明显和基本的原因拒绝参数组,例如没有填写名字或电子邮件。如果它有点复杂,那么你应该只对模型进行验证。创建。如果你在不想要的时候一直在创建副本,那么你应该进一步向上发展,防止这些参数完全由你的控制器结束。修正意见。