1

要件: users#index ページで任意のユーザーのパスワードを「password」にリセットするボタンが欲しい

私が試したこと:ショーアクションは必要ありませんでした!だから私はビューのショーの名前を「パスワードのリセット」に置き換え、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

ビュー名をからshowに変更した場合reset 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 に答える