:对嵌套属性的reject_if为空

时间:2012-12-01 17:03:49

标签: ruby-on-rails ruby-on-rails-3 model nested-forms nested-attributes

我有一个嵌套表单,其中每个帖子都有很多位置。问题是,如果用户创建一个位置然后将其留空,则会使用空白数据填充我的表格。

我认为这会在我的post.rb模型中执行:

 accepts_nested_attributes_for :locations, :allow_destroy => true, :reject_if => proc { |attributes| attributes['name'].blank? }

但他们仍然在滑倒并在空白时被拯救。知道为什么吗?

编辑:这是评论中要求的哈希:

Parameters: {"utf8"=>"✓","authenticity_token"=>"r74iCzC4tJgVI6FiCEH7XzfiTmaqKihF5JSs7Ow3MSI=", "post"=>{"title"=>"This is a test blog post fo
r stack overflow", "body"=>"This is a test blog post for stack overflow", "tag_list"=>"", "locations_attributes"=>{"0"=>{"name"=>"London", "long
itude"=>"-0.1276831", "latitude"=>"51.5073346"}, "1354382846976"=>{"name"=>"Paris", "longitude"=>"2.3522219", "latitude"=>"48.856614"}, "1354382
849464"=>{"name"=>"", "longitude"=>"", "latitude"=>""}, "1354382850624"=>{"name"=>"", "longitude"=>"", "latitude"=>""}}}, "_wysihtml5_mode"=>"1"
, "name"=>"", "legname"=>"Paris", "longitude"=>"2.3522219", "latitude"=>"48.856614", "commit"=>"Submit"}

2 个答案:

答案 0 :(得分:0)

您没有为您的位置模型显示代码,但听起来您需要添加验证,例如:

validates :name, :longitude, :latitude, presence: true

如果没有这些,可以使用这三个字段的空白值构建位置记录。所有你可能已经填充的是post_id。

答案 1 :(得分:0)

我通过将属性分离到数组并删除空白然后从表中删除任何空行来解决了这个问题。

locations = []
locations = locations.delete_if { |elem| elem.flatten.empty? }

after_save { |location| location.destroy if location.name.blank? }

感谢您的建议!