2011-11-29 138 views
0

使用Rails 3.1和authlogic。我有一個用戶模型,我想在其中將表單分成幾個部分,以便我不混合配置文件,帳戶設置和更改一種形式的密碼。這些列全部在同一個表中。編輯不使用編輯動作的用戶列

問題在於,無論何時該操作未通過驗證,我只能返回閃爍錯誤消息。我想使用正常的錯誤信息嵌入到相同的操作中,但由於我使用的是redirect_to :back,因此我無法存儲任何錯誤消息。

我應該怎麼做才能以本地方式使用Rails錯誤消息?

這裏是我的代碼:

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     flash[:notice] = "Welcome!" 
     redirect_back_or_default account_url 
    else 
     render :action => :new 
    end 
    end 

    def show 
    @user = @current_user 
    @header_title = 'Account settings' 
    end 

    def edit 
    @user = @current_user 
    end 

    def update 
    @user = @current_user # makes our views "cleaner" and more consistent 
    if @user.update_attributes(params[:user]) 
     flash[:notice] = "Account settings updated." 
     redirect_to :back 
    else 
     flash[:error] = "Errors found. Please check again."  
     redirect_to :back 
    end 
    end 

    def password 
    @user = @current_user 
    end 
end 

回答

0

由於錯誤信息被存儲在實例變量,以及這些實例變量不會被周圍的GET請求重定向後,用戶的瀏覽器會讓你應該改爲呈現您希望從更新操作中將其帶回的模板。

由於您有可能需要更新的不同部分,因此您可以檢查更新操作中的引用者以決定要呈現哪個模板。

或者(也許更乾淨地),您可以爲這些不同的部分創建新的資源。對名字的思考可能很困難,但是這可以讓你分離關注點並可能編寫更少的代碼。