基于RAILS 3中的操作的不同reject_ifs(嵌套属性)

时间:2013-05-16 07:43:24

标签: ruby-on-rails

我想在创建期间和更新操作期间使用不同的reject_ifs。

我这里有附件模型

的嵌套属性
has_many :attachments
accepts_nested_attributes_for :attachments, :allow_destroy => true, :reject_if => proc { |attributes| attributes['attachment_description'].blank? }

我想要创建操作的特定:reject_if选项和更新操作的另一个特定选项...

例如:

更新...

如果描述为空或零,则拒绝:

:reject_if => proc { |attributes| attributes['attachment_description'].blank? }

创建...... 如果文件名为空或零,则拒绝:

:reject_if => proc { |attributes| attributes['attachment_file_name'].blank? }

我也不确定如何在:on=> :update块中实施:on=> :createaccepts_nested_attributes_for

任何变通办法都将受到赞赏。感谢。

修改

试图以这种方式使用它,但没有运气。

has_many :attachments, dependent: :destroy
  accepts_nested_attributes_for :attachments, :allow_destroy => true, :reject_if => proc { |attributes| attributes['attachment'].blank? }, on: :create
  accepts_nested_attributes_for :attachments, :allow_destroy => true, on: :update

它说......

undefined method `key?' for nil:NilClass

1 个答案:

答案 0 :(得分:0)

您的attributes哈希为零,因此您无法访问其'attachment'密钥。

您应该确保散列永远不会为零,如果不能,则更改proc以处理nil大小写。