2013-02-21 3 views
0

Я использую устройство для аутентификации в своем приложении rails. Я могу войти и выйти, а также зарегистрироваться. Однако, как только пользователь будет подписан, я хочу предоставить пользователю возможность изменить свой пароль. Для этого приложение предоставляет ссылку на 'edit_user_registration_path', который показан на выходных рейках ниже.rails devise edit_user_registration

Когда пользователь нажимает на ссылку изменить пароль ниже,

<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 "https://stackoverflow.com/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' 
+0

Не могли бы вы показать нам: приложение/просмотров/макеты/_header.html.erb: 22 – Leito

+0

Я считаю, вы вызываете edit_user_path самостоятельно, без указания того, какой пользователь должен редактировать. – Leito

+0

Как вы уже догадались, я использую edit_user_path. Что-то не так с этим? как указать здесь пользователя?

  • <% = link_to "Настройки", edit_user_path%>
  • sthustfo

    ответ

    1

    важные линии в указанных журналах являются:

    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' 
    

    Маршруты должны совпадать со всеми его параметрами, в этом случае edit_user GET /users/:id/edit(.:format) users#edit не соответствует при отсутствии: id.

    Вместо:

    <%= link_to "Settings", edit_user_path %> 
    

    Отправьте CURRENT_USER в качестве параметра:

    <%= link_to "Settings", edit_user_path(curent_user) %> 
    
    +0

    Я принимаю ваш ответ, так как ваш комментарий выше исправил проблему. – sthustfo