2016-07-13 16 views
1

Ich baue eine Rails-Anwendung und ich bin vor einem Problem mit Formular kann ich nicht beheben. Ich habe ein order Modell, das so belongs_to customer wenn ich die Form bauen ich @order = @customer.orders.buildRails :: in verschachtelten Modell-Form, updates gehört zu "Eltern" Attribute

Das funktioniert gut, Aufträge speichern Attribute, aber ich möchte auch Kunden als auch aktualisieren Attribute, die nie funktionieren.

Wie kann ich Bestellungen speichern und die "übergeordneten" Kundenattribute im selben Prozess aktualisieren?

Danke für Ihre Hilfe!

Edit:

Kundenmodell:

class Customer < ActiveRecord::Base 
    has_many :orders 
end 

Auftragsmodell:

class Order < ActiveRecord::Base 
    belongs_to :customer 
    accepts_nested_attributes_for :customer 
end 

Mein Projekt:

  • Ruby On Rails 4.2.6/2.2.2 Rubin
  • Devise 3.5.9
  • Einfache Form 3.1.0
+0

update Kundenattribute bedeutet was? Sie möchten einige Attribute senden, die im 'customer' Objekt gespeichert werden sollen ODER Sie möchten einige Attribute abhängig von der' order' einstellen? – lcguida

+0

Kunde hat ein Profil mit einigen Feldern (Name, Adresse, Stadt, ...). Im Bestellformular gibt es einen Bereich, wo der Kunde einige seiner Informationen aktualisieren kann. Wenn der Kunde das Formular abschickt, sollte er eine Bestellung erstellen und die Kundenprofilinformationen aktualisieren. – anthony

Antwort

1

Sie sollten Ihren Kunden in Ihrer create-Methode aktualisieren. Wie wäre es mit:

def create 
     @order = current_customer.orders.build order_params 
     if @order.save 
      @order.customer.update_attributes(order_params[:customer_attributes]) 
      ... 
     else 
      ... 
     end 
     end 
0

In Ihrer Update-Aktion, können Sie etwas tun:

def update 
    @customer = Customer.find(params[:id]) 
    if @customer.update_attributes(customer_params.merge({ order_attributes: order_params})) 
    render @customer 
    end 
end 

Dabei sind customer_params und order_params Methoden, die starke Parameter verwenden, um Parameter, die vom Formular gesendet werden, auf die weiße Liste zu setzen.

Offensichtlich habe ich den Code nicht getestet, aber ti sollte dir eine Richtung geben.

Hoffe, dass hilft!