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

これらがないと、これら 3 つのフィールドに空白の値を使用してロケーション レコードが作成される可能性があります。おそらく入力されているのはpost_idだけです。

于 2012-12-02T20:06:29.653 に答える