2

タイトルが示すように、私はdeviseを使用しています。これを行うプロセスを説明するこの リンクにたどり着きました。私はこのユーザーコントローラーを持っています:

    def update_password
      @user = User.find(current_user.id)
      #raise @user.to_yaml
      if @user.update_attributes(params[:user])
        # Sign in the user by passing validation in case his password changed
        sign_in @user, :bypass => true
        #flash[:notice] = "Password Successfully Changed"
        redirect_to settings_path
      else
        flash[:notice] = @user.errors.full_messages
        render password_path
      end
    end

を無視し#raise @user.to_yamlます。そして、このビュー:

        <h1>Change Password</h1>

        <%= form_for(:user, :url => { :action => 'update_password'}) do |f| %>
            <div>
                <%= f.label :current_password %>
                <%= f.password_field :current_password %>
            </div>

            <div>
                <%= f.label :password %>
                <%= password_field_tag :password %>
            </div>

            <div>
                <%= f.label :password_confirmation %>
                <%= f.password_field :password_confirmation %>
            </div>

          <div>
                <%= f.submit "Change Password" %>
            </div>
        <% end %>

私はこのコントローラーメソッドにマップされたそのビューを持っています:

   def password
      @user = current_user
    end

アクションとビューを分離するには、私の config/routes.rb は次のとおりです。 match '/password' => 'users#password', :as => 'password'

フォームから [パスワードの変更] ボタンをクリックすると問題が発生します。これは、「http://localhost:3000/assets?action=update_password&controller=users」へのリンクで、「id=assets のユーザーが見つかりませんでした」というエラーが表示されます。

Webページの内容をコピーしたため、なぜこのように動作するのか、何が間違っているのかわかりません。誰かがこれについて何か経験があり、私を助けることができますか? ありがとう!

4

1 に答える 1

1

Rails 3 以降を使用している場合は、リソース構文を使用してルートを設定できます。

resources :users do
  member do # These routes will apply to specific model instances
    get 'password' # /users/:id/password
    put 'update_password' # /users/:id/updated_password
  end
end

form_for次に、宣言でパスヘルパーを使用できます

<%= form_for @user, :url => update_password_user_path(@user) do |form| %>
...
<% end %>
于 2012-06-20T04:07:57.487 に答える