2011-11-29 140 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请求重定向后,用户的浏览器会让你应该改为呈现您希望从更新操作中将其带回的模板。

由于您有可能需要更新的不同部分,因此您可以检查更新操作中的引用者以决定要呈现哪个模板。

或者(也许更干净地),您可以为这些不同的部分创建新的资源。对名字的思考可能很困难,但是这可以让你分离关注点并可能编写更少的代码。