2011-01-07 20 views
3

Ich arbeite mit einem Modell namens Recover. Vor dem Erstellen des Modells möchte ich das boolesche Attribut Combo.ccupied = true unter Verwendung des Recover.combo_id-Attributs als Referenz speichern.Wie kann ich ein anderes Modell mithilfe eines Callbacks aktualisieren?

Es scheint, dass mein SQL die Abfrage ordnungsgemäß ausführt, aber dieses Attribut wird nicht gespeichert. Wie kann ich Combo.ccupied = true speichern?

recover.rb:

before_create: checkin

geschützt

def checkin x = Combo.find_by_id (combo_id) .occupied = wahre
Ende

Schienen Konsole:

POST Started "/ erholt" für 127.0.0.1 bei 2011-01-06 17.07.24 -0800
Verarbeitung von RecoversController # erstellen, wie HTML
Parameter: { "UTF-8" => "✓", "authenticity_token" => "o1Iu3Y9/rVBOZPoDUgVP/tRfQ8GxbdWC40DbPq9YxUE =", "wiederherstellen" => {"combo_id" => "4", "email" => "[email protected]"}, "commit" => "Erstelle wiederherstellen"} Recover Laden (0.2ms) SELECT "erholt". "Id" FROM "erholt" WHERE ("erholt". "Email" = '[email protected] arin.edu ') LIMIT 1
Load (0,1ms wiederherzustellen) SELECT "erholt". "id" FROM "erholt" WHERE ("erholt". "combo_id" = 4) LIMIT 1
Combo Load (0,5ms) SELECT "Combos". * VON "Combos" WHERE ("Combos". "ID" = 4) LIMIT 1 AREL (0,5 ms) INSERT IN "erholt" ("Schließfachnummer", "E-Mail", "Anfragen "," created_at ", " updated_at "," combo_id ") WERTE (NULL, '[email protected]', NULL, '2011-01-07 01: 07: 24.287072', '2011- 01-07 01: 07: 24.287072 ', 4) Umgeleitet nach http://localhost:3000/recovers/14 302 Completed Gefunden in 119ms

RecoversController # erstellen

def @recover = Recover.new erstellen (params [: recover])

respond_to do |format| 
    if @recover.save 
    format.html { redirect_to(@recover, :notice => 

‚Recover wurde erfolgreich erstellt. ')} Format.xml {machen: xml => @recover,: status =>: erstellt,

: location => @recover}

else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @recover.errors, :status => 

: unprocessable_entity} Ende

end 

Ende

+0

Es scheint, dass kein Objekt in Ihrem RecoverController # create erstellt wurde. Können Sie den Inhalt dieser Methode posten? – apneadiving

+0

Sicher Sache. Es ist getan –

Antwort

5

Sie müssen speichern, damit der neue Wert in die Datenbank geschrieben wird:

Dies ist einfacher, wenn Sie update_attribute verwenden. Auch, wenn Sie eine belongs_to Beziehung haben, können Sie mit dem find verzichten:

belongs_to :combo 

def checkin 
    if combo # true unless combo_id is nil 
    combo.update_attribute(:occupied,true) 
    end 
end 

Beachten Sie, dass update_attribute Validierung umgeht. Wenn Sie validieren müssen, verwenden Sie stattdessen update_attributes(:occupied=>true).

+0

großartig! Ich benutzte die falsche Methode (speichern), vergaß die! –

+0

verdammt zu spät für mich aber +1;) – apneadiving

Verwandte Themen