2014-01-07 63 views
0

在我的控制器中,我想通過重定向回導致出現異常的控制器操作來處理ActiveRecord :: RecordInvalid異常,但我還想保留用戶輸入的表單數據。有處理這個問題的最佳方法嗎?如何在處理異常時保留字段數據?

rescue_from ActiveRecord::RecordInvalid do |exception| 
    redirect_to :back, alert: exception.message 
end 

這當前重定向並正確顯示閃光消息,但我不確定保留表單數據的最佳做法是什麼。提前致謝。

回答

0

通常這是處理控制器中異常的方法。說創造行動。

def create 
    @your_inst_var = YourModel.new(your_instance_var_params) 

    if @your_inst_var.save 
    redirect_to your_inst_var_path, notice: 'Your Inst Var was successfully created.' 
    else 
    render action: 'new' 
    end 
end 

* your_instance_var_params被定義爲滿足軌道4個強PARAMS

+0

感謝您的答覆私有方法,但我不知道有你的榜樣正在處理任何異常。你能澄清嗎? – Joey

+0

當您無法將記錄保存到數據庫時引發RecordInvalid。我的答案通過檢查記錄是否保存來處理這個異常。如果它沒有保存,那麼你知道你提出了RecordInvalid,在這種情況下,你渲染的動作是新的。閱讀這個http://stackoverflow.com/a/14976232/1429856,因爲它解釋了爲什麼渲染新會保持你的params。 – toolz

+0

也許.save引發並處理它自己的異常,並在有異常的情況下返回false(.save!實際上會暴露異常,是否正確?)。 – Joey