0

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

我认为这将做它在我的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"} 
+0

你可以发表你用来创建邮政的参数哈希?我的猜测是,它开始时是畸形的。你知道使用accept_nested_attributes也会自动保存关联,无论你保存文章,运行验证?请参阅:http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html –

+0

谢谢!是的,我猜这是因为我在我的创建函数中做了一些非常时髦的东西,它改变了属性,因此可以检查它们的唯一性。我认为现在回到制图板。我已经发布了散列,以防万一有什么来找你! –

+0

你的位置属性很奇怪。它不应该是一个散列,它应该是一个散列数组(参见http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html)。不知道这是否会造成麻烦 –

回答

0

你没有表现出你的代码为你定位模型,但它听起来像是你需要添加验证,如:

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

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

0

我解决了这个问题,将属性分隔成一个数组,删除空白,然后删除表中的空白行。

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

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

感谢您的建议!