2012-02-14 6 views
0

ruby​​ on rail 3.0.3 appは、カートを顧客に見せるときに空のアドレス形式を表示します。私はそれが検証条件にもかかわらず、働く空のフォームを検証する場合妥当性検査とネストされたフォーム

validates :nom,:prenom,:adresse,:code_postal,:ville,:email, :presence => true 

addresseモジュールは、すべてのフィールドの存在をお願いします。 私はフォームを完成させ、次のページに行き、今作成された作成フォームに戻ります。今私がフィールドを削除する場合、valiates考慮されます。ここで

は、showアクションでネストされたフォームのための私の空のアドレスを作成するコードです:

if (@cartshowed.adresse_client.nil?) 
     @cartshowed.build_adresse_client 
     end 

私は空のアドレス検証をusind時に無視されていることを推測する、しかし、すぐに私はすでに有効なため、データを検証してそれは動作します。

エディション用だけでなく、アドレスを作成するときに、どのように検証作業を行うことができますか?

PS:編集/作成は、同じコントローラで同じページで行われます。エディションは存在するようには意図されていませんでしたが、動作します。

編集:私の問題は、ネストされたフォームを使用してアドレスを作成すると、アドレスのフィールドが完全にオーバーライドされるということです。 どのようにして、ネストされたフォームで制限を検証できますか?

答えて

0

をすぐに私は私の子供の検証reject_if使用してモデルがないようです全体を考慮に入れるreject_ifを削除するとすべての問題が解決されました。空のフォームまたはvalidates要件に準拠していないフォームは、コントローラのupdate_attributesステップで正しく拒否されます。

1

Addresseがネストされたアトリビュート(カートhas_oneアドレス)の場合は、おそらくを使用して:reject_if Procを追加する必要があります。

accepts_nested_attributes_for :addresse, :reject_if => :any_blank 

私はライアンDaigle氏より良い例を与えることができなかった:

http://archives.ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html#method-i-accepts_nested_attributes_for

+0

問題は変わりません: 'proc {| attrs | attrs.all? {| k、v | v.blank? }} ' それは空白のフィールドを拒否すべきです。私はまだ私のupdate_attributesメソッドを渡すことができます。 再度、アドレスの検証は、アドレス – Syl

+0

の作成時にのみ無視されます。reject_ifの表示に感謝します。 accepts_nested_attributes_for行にreject_ifが指定されていないと、実際に意図したとおりに動作します。 – Syl

関連する問題