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

게시를 만들 때 사용하는 params 해시를 게시 할 수 있습니까? 내 추측으로는 처음부터 기형이 맞았다는 것입니다. accepts_nested_attributes를 사용하면 게시물을 저장하고 유효성 검사를 실행할 때마다 연관을 자동으로 저장한다는 것을 알고 계셨습니까? 참조 : http://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html –

+0

고마워요! 네, 속성을 변경하여 고유성을 검사 할 수 있도록 작성 함수에서 꽤 펑키 한 작업을하고 있기 때문에 그럴 것 같아요. 나는 그것들이 그때 드로잉 보드로 돌아간 것 같아요. 나는 해시를 게시했습니다. 당신에게 어떤 일이 생길 경우에 대비해서! –

+0

location_attributes가 이상합니다. 해시가 아니어야하며 해시 배열이어야합니다 (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? }

감사합니다!