0

Railsアプリの認証にdeviseを使用しています。サインインとサインアウト、およびサインアップができます。ただし、ユーザーがサインインしたら、ユーザーがサインインパスワードを変更するための手段を提供したいと思います。そのために、アプリは、以下のレーキルート出力に表示される「edit_user_registration_path」へのリンクを提供します。

ユーザーが下の[パスワードの変更]リンクをクリックすると、

<li><%= link_to "Change Password", edit_user_registration_path %></li>

次のエラーが発生します

ActionController::RoutingError (No route matches {:action=>"edit", :controller=>"users"}):

表示、編集、更新のアクションを備えたUsersControllerがあります。編集アクションは、Usersモデルの他の列を更新することです。

ルートは以下のように設定されています

devise_for :users
resources  :users, only: [:show, :edit, :update]

すくいルート出力-

    new_user_session GET    /users/sign_in(.:format)       devise/sessions#new
        user_session POST   /users/sign_in(.:format)       devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
       user_password POST   /users/password(.:format)      devise/passwords#create
   new_user_password GET    /users/password/new(.:format)  devise/passwords#new
  edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
                     PUT    /users/password(.:format)      devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel
   user_registration POST   /users(.:format)               devise/registrations#create
new_user_registration GET    /users/sign_up(.:format)       devise/registrations#new
edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit
                     PUT    /users(.:format)               devise/registrations#update
                     DELETE /users(.:format)               devise/registrations#destroy
           edit_user GET    /users/:id/edit(.:format)      users#edit
                user GET    /users/:id(.:format)           users#show
                     PUT    /users/:id(.:format)           users#update
                root        /                              home#index

コンソールログは以下のとおりです

Started GET "/users/edit" for 127.0.0.1 at 2013-02-21 15:21:38 +0530
Processing by Devise::RegistrationsController#edit as HTML
 User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
 Rendered devise/registrations/edit.html.erb within layouts/application (15.9ms)
 Rendered layouts/_shim.html.erb (0.0ms)
 Rendered layouts/_messages.html.erb (0.1ms)
 Rendered layouts/_header.html.erb (42.5ms)
Completed 500 Internal Server Error in 99ms

ActionController::RoutingError (No route matches {:action=>"edit", :controller=>"users"}):
app/views/layouts/_header.html.erb:22:in `_app_views_layouts__header_html_erb__267315279__621159918'
app/views/layouts/application.html.erb:20:in `_app_views_layouts_application_html_erb__982964301_89714280'
4

1 に答える 1

1

上記のログの重要な行は次のとおりです。

ActionController::RoutingError ({:action="edit", :controller="users"} に一致するルートはありません): app/views/layouts/_header.html.erb:22:in `_app_views_layouts__header_html_erb__267315279__621159918'

この場合、ルートはすべてのパラメータと一致する必要があります

edit_user GET    /users/:id/edit(.:format)      users#edit

:id が指定されていない場合は一致しません。

それ以外の:

<%= link_to "Settings", edit_user_path %>

current_userをパラメーターとして送信します。

<%= link_to "Settings", edit_user_path(current_user) %>
于 2013-02-22T15:43:56.407 に答える