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? }

感謝您的建議!