不使用编辑操作编辑用户列

时间:2011-11-29 14:22:08

标签: ruby-on-rails ruby-on-rails-3 authlogic

使用Rails 3.1和authlogic。我有一个用户模型,我想将表单分成几个部分,这样我就不会混合配置文件,帐户设置,更改一个表单中的密码。这些列都在同一个表中。

问题在于,只要它没有通过任何一个动作的验证,我只能返回一个flash错误消息。我想将正常的错误消息嵌入到同一个操作中,但因为我使用的是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

1 个答案:

答案 0 :(得分:0)

因为错误消息存储在实例变量中,并且那些实例变量不会出现用户浏览器在重定向后进行的GET请求,所以您应该渲染您希望从更新中取回的模板动作。

由于您有可能PUT更新的不同部分,您可以在更新操作中检查引用程序,以决定要呈现的模板。

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