2013-07-01 15 views
10

Próbowałem dodać wyjątek w metodzie before_save w modelu szyn, ale w widoku nie ma komunikatu o błędzie.Jak dodać błędy do modelu Rails?

Model:

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 

Widok:

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

To jest zawsze fałszywe.

Jak dodać komunikaty o błędach do modelu?

EDIT:

Problem polegał na tym, miałem przekierowanie po funkcji update_attribute zamiast ponownie renderowania akcję. Proszę o pomoc.

+1

Należy rozważyć stworzenie metody obsługi logiki "before_create". W ten sposób 'before_create: do_stuff' –

+0

Skąd wiesz, że File.open zgłasza wyjątek? Czy jesteś pewien, że nie tylko zwraca false z tego innego oświadczenia wewnątrz otwartego bloku? –

+0

Mam wylogowany błąd przez logger.info do pliku dziennika, błąd podnosi w części ratunkowej – SonIcco

Odpowiedz

15

Powinieneś wykonać to na walidacji, a nie na before_save. Zanim dojdziesz do wywołania zwrotnego before_save, rekord zostanie uznany za prawidłowy.

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

ten sam problem, jak również brak komunikatu o błędzie w widoku podniesionym z części ratunkowej – SonIcco

Powiązane problemy