0

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

我认为这会在我的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"}
4

2 回答 2

0

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

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

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

感谢您的建议!

于 2012-12-03T18:52:35.697 回答
0

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

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

如果没有这些,则可以使用这三个字段的空白值来构建位置记录。您可能得到的只是 post_id。

于 2012-12-02T20:06:29.653 回答