2013-07-01 50 views
10

我試圖在rails模型中的before_save方法中添加異常,但在視圖中不存在錯誤消息。如何向Rails模型添加錯誤?

型號:

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 

查看:

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

這始終是假的。

如何向模型添加錯誤消息?

編輯:

問題是,我有update_attribute函數,而不是再次渲染後動作重定向。 Thx尋求幫助。

+1

你應該考慮創建一個方法來處理你的「before_create」邏輯。像這樣'before_create:do_stuff' –

+0

你怎麼知道File.open引發異常?你確定它不只是從開放塊內的其他語句中返回false嗎? –

+0

我已經通過logger.info註銷了錯誤日誌文件,錯誤引發了救援部分 – SonIcco

回答

15

您應該在驗證上執行此操作,而不是在before_save上執行此操作。當你回到before_save回調時,記錄被認爲是有效的。

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

同樣的問題,救援部分提出的視圖中沒有錯誤信息 – SonIcco