2013-04-08 4 views
6

Ich bin so jede Beratung zu den Schienen wird sehr geschätzt.Nested Attribute: unerwünschte Validierung trotz reject_if: All_blank

Ich habe eine Klasse Eintrag mit verschachtelten Attributen Adressen,

/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 

mit Klasse-Adressen wie diese

/app/models/address.rb

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

Und in der verschachtelten Form habe ich

/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 

Die Idee ist, dass, wenn die Form der ‚build‘ wiedergegeben wird, wird eine leere ‚Adresse‘ zusätzlich zu den aktuellen Adressen erstellen aufgeführten in der Datenbank. Wenn die Änderungen gespeichert werden und die neue Adresse noch leer ist, wird sie zurückgewiesen und nicht in der Datenbank gespeichert.

jedoch die Validierung in der address.rb vor der Speicherung die Validierung tut, daher kann der Benutzer nicht mit der Speicherung Aktion fortzufahren. Gibt es etwas, das ich weggelassen habe?

Antwort

0

Versuchen Sie, false als Argument an save übergeben, um Validierungen zu überspringen.

1

Vielleicht möchten Sie ausdrücklich versuchen, die Attribute in Ihrer Adresse Modell Namensgebung, bevor ein neues, leeres erhalten überprüft erstellt wird. Etwas wie folgt aus:

# 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