2016-04-28 17 views
0

Hier sind 2 Modelle: Kunde und Adresse. Ein Kunde Adresse.Wie Fehler ausgelöst werden, wenn die Überprüfung verschachtelter Attribute fehlschlägt

class Customer < ActiveRecord::Base 
    has_one :address 
    accepted_nested_attributes_for :address, :allow_destroy => true 
end 

class Address < ActiveRecord::Base 
    belongs_to :customer 
    validates :add_line, :presence => true 
end 

<% simple_form_for @customer do |f| %> 
    ..... 
    <%=f.simple_fields_for :address do |builder| %> 
    <%=render ('address', f: builder) %> 
    <% end %> 
<%end %> 

Adresse Ansicht

<%=f.input :add_line %> 

address wird Attribut in customer verschachtelt. Das Problem, das wir haben, ist, dass, wenn address falsch (ex, ein add_line Null) innerhalb customer Ansicht geändert wird, gibt es keinen Fehler (@customer.update_attributes in Kunden-Controller) Pop-Up. Gibt es eine Möglichkeit, die geschachtelten Attribute so einzurichten, dass das Update fehlschlägt nil add_line?

Antwort

1

Zwei Dinge fingen mein Auge mit Ihrem ursprünglichen Beitrag:

One, denken Sie daran, dass Sie ein belongs_to :customer im Address Modell benötigen.

Zwei, benötigen Sie eine Validierung im Kundenmodell in Modell

class Customer < ActiveRecord::Base 
    has_one :address 
    accepted_nested_attributes_for :address, allow_destroy: true, reject_if: :address_invalid 
    private 
    def address_invalid(attributes) 
    # add custom validation code here ... 
    end 
end 
+0

Es gibt belongs_to bereits hinzuzufügen. Ist 'reject_if' für die Validierung im Modell 'address' überflüssig? Das 'address_invalid' würde die Validierung im' address' Modell wiederholen. – user938363

+0

Das Problem, das wir haben, ist, dass, wenn die 'add_line' im 'address'-Modell kein Nil ist, der Controller den Fehler auslösen sollte, anstatt ihn stillschweigend passieren zu lassen. Probieren Sie '!' Aus, und es wird kein Fehler ausgegeben, wenn im geschachtelten Modell ein Validierungsfehler auftritt. – user938363

+0

Scheitert es/Fehler implizit mit der Validierungsmethode im 'Customer' Modell? –

Verwandte Themen