2013-07-01 10 views
10

Ich habe versucht, eine Ausnahme in der before_save Methode in einem Schienenmodell hinzuzufügen, aber in der Ansicht existiert keine Fehlermeldung.Wie fügt man dem Rails-Modell Fehler hinzu?

Modell:

before_save do 
    doing_some_stuff 
    begin 
     File.open('some_file', 'w+') do |file| 
     if file.write(file_content) 
      return true 
     else 
      return false 
     end 
     end 
    rescue => e 
     self.errors.add(:base, e.message) 
     return false 
    end 

Ausblick:

<%= @model.errors.any? %> 

Dies ist immer falsch.

Wie füge ich Fehlermeldungen zum Modell hinzu?

EDIT:

Das Problem war, hatte ich eine Umleitung nach der update_attribute Funktion stattdessen die Aktion erneut zu leisten. Danke für Hilfe.

+1

Sie sollten in Betracht ziehen, eine Methode zu erstellen, die Ihre "before_create" -Logik behandelt. Wie das 'before_create: do_stuff' –

+0

Woher wissen Sie, dass File.open eine Ausnahme auslöst? Sind Sie sicher, dass es nicht nur false von dieser else Anweisung im offenen Block zurückgibt? –

+0

Ich hatte den Fehler über logger.info in die Logdatei ausgeloggt, der Fehler wird im Rettungsteil behoben – SonIcco

Antwort

15

Sie sollten dies bei der Validierung durchführen, nicht unter before_save. Zu dem Zeitpunkt, zu dem Sie zu dem Rückruf before_save gelangen, wird der Datensatz als gültig angenommen.

validate do 
    doing_some_stuff 
    begin 
    File.open(some_file, 'w+') do |file| 
     if !file.write(file_content) 
     self.errors.add(:base, "Unable to write #{some_file}") 
     end 
    end 
    rescue => e 
    self.errors.add(:base, e.message) 
    end 
end 
+0

Auch das gleiche Problem, keine Fehlermeldung in der Ansicht vom Rettungsteil – SonIcco

Verwandte Themen