Ruby on rails 从lambda中获取模型实例

Ruby on rails 从lambda中获取模型实例,ruby-on-rails,lambda,nested-attributes,Ruby On Rails,Lambda,Nested Attributes,我有一个嵌套表单,它在更新时为所有嵌套属性创建重复条目。为了防止出现这种情况,我想使用接受嵌套属性的如果就拒绝\u选项。代码可能如下所示: accepts_nested_attributes_for :implicants, :reject_if => lambda { |a| a.is_a_duplicate? } 不幸的是,a这里有一个ActionController::参数,而不是我正在使用的类的实例。我试过这个: accepts_nested_attributes_for :im

我有一个嵌套表单,它在更新时为所有嵌套属性创建重复条目。为了防止出现这种情况,我想使用
接受嵌套属性的
如果
就拒绝\u选项。代码可能如下所示:

accepts_nested_attributes_for :implicants, :reject_if => lambda { |a| a.is_a_duplicate? }
不幸的是,
a
这里有一个ActionController::参数,而不是我正在使用的类的实例。我试过这个:

accepts_nested_attributes_for :implicants, :reject_if => lambda { |a| self.is_a_duplicate?(a) }

但这会导致调用类,而不是实例。如果
lambda,是否有任何方法从
reject\u中引用实例?

我建议这不是
:reject\u if
应该负责的事情<代码>:如果
意味着出于非常明显和基本的原因拒绝参数组,例如没有名字或没有填写电子邮件,则拒绝。如果有点复杂,那么您应该只对正在创建的模型进行验证。如果你一直在不想创建副本,那么你应该更进一步,通过修复视图来防止这些参数最终出现在你的控制器中。

我建议这不是
:如果
应该拒绝的事情<代码>:如果
意味着出于非常明显和基本的原因拒绝参数组,例如没有名字或没有填写电子邮件,则拒绝。如果有点复杂,那么您应该只对正在创建的模型进行验证。如果你一直在不想创建重复项,那么你应该更进一步,防止这些参数最终出现在你的控制器中,例如,修复视图。

Solid advice。最后,我无法在视图中修复此问题(因为我仍然需要显示子元素,以便用户可以编辑和更新它们),但我能够检查事务中是否存在重复项。可靠的建议。最后,我无法在视图中解决这个问题(因为我仍然需要显示子元素,以便用户可以编辑和更新它们),但我能够在事务中检查重复项。