Ruby on rails 要求用户输入密码以更新配置文件

Ruby on rails 要求用户输入密码以更新配置文件,ruby-on-rails,Ruby On Rails,在我的更新用户配置文件表单中,第一个字段要求用户输入其当前密码。当她提交表单时,我先验证密码,然后再接受其他字段中的更改。以下是我目前在用户控制器中执行此操作的方式: def update @user = User.find(params[:id]) if @user.has_password?(params[:user][:password]) if @user.update_attributes(params[:user]) flash[:success] = "

在我的更新用户配置文件表单中,第一个字段要求用户输入其当前密码。当她提交表单时,我先验证密码,然后再接受其他字段中的更改。以下是我目前在用户控制器中执行此操作的方式:

def update
  @user = User.find(params[:id])
  if @user.has_password?(params[:user][:password])
    if @user.update_attributes(params[:user])
      flash[:success] = "Profile updated."
      redirect_to @user
    else
      render 'edit'
    end
  else
    flash[:failure] = "Password does not match!"
    render 'edit'
  end
end
我觉得有更好的办法。例如,我可以在用户模型中进行密码匹配验证。然后formtastic会自动为我处理错误消息(与我上面丑陋的flash方法相反)。我试着和你一起做这件事

validate :password_match?, :on => :update

但由于可疑参数无法从模型中访问

我为此搜索了20分钟,想找到一种方法,却找不到任何与设计或逻辑无关的东西。我正在从头开始进行身份验证(一切正常:登录、会话等)


求你了,把更好的路的灯给我看看

您不需要设计,只要在更新时在控制器上使用before过滤器即可 在您的配置文件控制器上

before_filter password_match, :only => :update
然后在底部显示为私有


private

def password_match
   @user = User.find(params[:id])
   @user.has_password?(params[:user][:password])


如果你用过,下一次我肯定会用Desive。我最近学习了Rails,并遵循了一个涉及从头构建身份验证的教程。从那以后,我就一直在为我的项目编写代码。这条路让我陷入了困境。将您拖入上下文可能不值得,我们必须来回多次。我只想坚持我原来的解决方案。我想这可能是因为我不知道如何使用errors.add来在password字段中添加自定义错误。无论如何,接受这个答案,因为这是一个很好的建议。去喝点咖啡,休息一会儿。你不需要错误。另外,在屏幕顶部出现一个漂亮的闪光错误怎么样?只需添加一个flash。现在[:error]=“密码与当前密码不匹配”,就是这样:)这就是我最初的方法,请参阅上面的第一个代码示例。我决定坚持下去。

private

def password_match
   @user = User.find(params[:id])
   @user.has_password?(params[:user][:password])