2016-09-16 3 views
1

Unsicher, warum das passiert? Immer noch ein Noob ..SystemStackError (Stack-Ebene zu tief) in Modell

Ich aktualisiere nur ein Feld in der Mine Tabelle, bevor ich den Datensatz speichern. Alle Variablen werden genau eingezogen. Die untere Zeile gibt zurück, was sie auch angenommen hat.

CreateFulfillmentService::NON_US_MARKETPLACES.include?(self.marketplace) 

Und self ist eine Instanz Mine. Und self.marketplace gibt den richtigen Marktplatz zurück.

Dies ist mein Controller

class Mine < ActiveRecord::Base 
    belongs_to :shop 
    validates :merchant_id, presence: true 
    validates :auth_token, presence: true 
    before_save :assign_three_speed 

def assign_three_speed 
    if CreateFulfillmentService::NON_US_MARKETPLACES.include?(self.marketplace) 
    self.update(three_speed: false) 
    else 
    self.update(three_speed: true)  
    end 
end 

end 

Wo ich verirrt hat?

Antwort

2

before_save ist ein Rückruf. Es läuft jedes Mal, wenn du eine Instanz von Mir speicherst.

In assign_three_speed, rufen Sie self.update, die am Ende ruft save. Dieser gespeicherte Aufruf löst einen weiteren Rückrufzyklus aus, und die Schleife wird für immer fortgesetzt (bis sie mit dem SystemStackError beendet wird).

Versuchen Sie stattdessen, three_speed im Callback (anstatt zu aktualisieren) zuzuweisen. Die Änderung wird für die Datenbank beibehalten, da die Zuweisung vor das Modell gespeichert wird.

def assign_three_speed 
    if CreateFulfillmentService::NON_US_MARKETPLACES.include?(self.marketplace) 
    self.three_speed = false 
    else 
    self.three_speed = true 
    end 
end 
+0

Vielen Dank! Das war es .. Ich werde die Antwort in einer Minute annehmen .. werde mich jetzt nicht lassen – ToddT

Verwandte Themen