1

要求:我想要一个按钮将任何用户的密码重置为 users#index 页面中的“密码”

我试过的:我不需要表演动作!所以我将视图中的显示名称替换为“重置密码”,在 user_controller 中,我进行了以下更改

def show
@user = User.find(params[:id]) 
@user.password = "password"
@user.password_confirmation = "password"
if @user.save
    redirect_to users_url, notice: "Password was successfully reset!"
else
    redirect_to users_url, notice: "Password reset failed"
end
end

结果:它不起作用!没有错误或任何东西。它重新加载页面并显示“密码重置失败”通知..

如何使它工作?它与路由中调用的http方法有关吗?

4

2 回答 2

2

如果您已将视图名称从 更改showreset password,您还必须更改操作名称并将此新路由添加到您的routes.rb文件中。但我认为在这种情况下最好的选择是:

在您的 中创建按钮users#index,调用reset控制器中的操作:

<%= button_to "Reset Password", :controller=>"users", :action => "reset", :id=>user.id %>

然后,在users#controller

def reset
  @user = User.find(params[:id])
  @user.password = "password"
  @user.password_confirmation = "password"
  if @user.save
    redirect_to users_url, notice: "Password was successfully reset!"
  else
    redirect_to users_url, notice: "Password reset failed"
  end
end

现在,您只需将此新操作添加到您的routes.rb

post "users/reset"

我希望它有帮助...

于 2012-06-25T16:05:32.080 回答
0

您可能希望在视图中创建一个表单,该表单将在身份验证后显示,然后确保创建一个隐藏字段,在登录后将 password_value 设置为 NULL 创建一个表单,当 Password_value 等于 NULL 时显示该表单以使该人选择他的新密码。

f.hidden_field :password_value, :value = nil

玩得开心

于 2012-06-25T15:50:44.180 回答