0

私はレールに慣れていないので、ユーザーページでパスワードを変更する機能をユーザーに提供したいと考えています。古いパスワードを要求し、新しいパスワードを設定します。ただし、これを達成する方法がわかりません。

メールでパスワードをリセットする Railscasts のエピソードがありますが、メールでやりたくありません。

パスワード更新コントローラーを生成しました。しかし、私はひどい間違いを犯していることを知っています。うまくいけば、あなたたちはそれを指摘することができます. そして、うまくいけば、この質問はあまり混乱しませんでした.

パスワード更新コントローラー

  class PasswordUpdateController < ApplicationController
  def new
  end

  def update
  end

  def show
    @user = User.find(params[:id]) 
  end
  end

new password_update

 %h1
 = form_for @user, :url => password_update_path(params[:id]) do |f|
   .field
     = f.label :old_password
     = f.password_field :password
   .field
     = f.label :password
     = f.password_field :password
   .field
     = f.label :password_confirmation
     = f.password_field :password_confirmation
   .actions
     = f.submit "Update Password"

ルーティング エラー [POST] "/password_update/1" に一致するルートがありません

ルート.rb

TootApp::Application.routes.draw do

「セッション/新規」を取得

「static_pages/home」を取得

「static_pages/help」を取得

「password_updates/new」を取得

リソース:セッション

リソース :製品

リソース :写真

リソース :password_update

4

1 に答える 1

3

これは、コントローラーを使用する方法ではありません。パスワードの更新は「コントローラー」内の「アクション」である必要があり、そのコントローラーは、ユーザーの資格情報に関しては、「更新」アクションがフォームから投稿するパラメーターを取得する UsersController にある必要があります。

class UsersController < ApplicationController
  def update
    @user = User.find(params[:id])
    @user.update_attributes(params[:user])
    ....
  end
end

HTML フォームでは、次のように指定できます。

= form_for @user do |f|
  ...

レールはバックグラウンドで暗黙的に正しいURLを提供するため、URLを指定する必要さえありません:)

そして、次のように「ルート」が正しく設定されていることを確認してください。

resources :users

基本的に、ユーザーの RESTful ルートをセットアップします。コンソールで次のコマンドを実行すると、生成されるルートを確認できます。

rake routes

独自のユーザー資格情報管理機能を接続することとは別に、Jose Valim による devise gem を試して、SimpleForm gem と組み合わせてみませんか。

お役に立てれば!

于 2013-06-17T03:03:07.467 に答える