2013-04-08 18 views
6

私はレールが初めてであるので、アドバイスをいただければ幸いです。ネストされた属性:reject_ifの不都合な妥当性検査:All_blank

私は、ネストされた属性アドレスを持つクラスのエントリを持って、この

/app/models/address.rbのようなクラスのアドレスと

/app/models/entry.rb

class Entry < ActiveRecord::Base 
    has_many :addresses, :dependent => :destroy 
    accepts_nested_attributes_for :addresses, 
           :allow_destroy => true, 
           :reject_if => :all_blank 
end 

class Address < ActiveRecord::Base 
    belongs_to :entry 
    validates :zip, :presence => true 
end 

そして、ネストされた形で私が

を持っています

/app/view/entries/_form.html.slim

= simple_form_for(@entry) do |f| 
    = f.error_notification 
    - @entry.addresses.build 
    .form-inputs 
    = f.simple_fields_for :addresses do |address| 
     = render 'address_form', :f => address 

アイデアは、フォームがレンダリングされるとき、「ビルド」は記載されている現在のアドレスに加えて、空の「アドレス」を作成するということですデータベース。変更が保存されると、作成された新しいアドレスがまだ空の場合、拒否され、データベースに保存されません。

ただし、address.rbの検証で保存前に検証が行われているため、保存操作を続行できません。私は何も出ていませんか?

答えて

0

引数としてfalsesaveに渡して、検証をスキップしてみてください。

1

アドレス・モデルの属性に明示的に名前を付けて、空の新しいものが作成される前にチェックすることをお勧めします。このようなもの:

# in app/models/entry.rb 

accepts_nested_attributes_for :addresses, reject_if: lambda {|attributes| nested_address_is_empty?(attributes) } 

private 

def self.nested_address_is_empty?(attrs) 
    attrs['line_1'].blank? && attrs['line_2'].blank? && attrs['zip'].blank? 
end 
関連する問題