2015-06-13 2 views
2

Я только начал использовать Завещание и я сделал несколько: настройкиНастройка DEViSE регистрация маршруты редактирования/обновление и просмотры

  • Я сгенерированные мнения и настроить свою точку зрение (Форма регистрации и т.д.)
  • Я генерироваться контроллеров, так что я могу сделать некоторые изменения там
  • Я индивидуальные маршруты, в основном, как за этот пост: http://iampedantic.com/post/41170460234/fully-customizing-devise-routes

Все прекрасно работает, кроме edit_user_registratio n (просмотр, в котором пользователи могут изменять свой адрес электронной почты и пароль или удалять свою учетную запись).

Это то, что я для регистрации в config/routes.rb (части, не связанные с контроллером регистраций опущены):

devise_for :users, skip: [:registrations] 

as :user do 

    # joining 
    get '/register' => 'users/registrations#new', as: 'new_user_registration' 
    post '/register' => 'users/registrations#create', as: 'user_registration' 

    scope '/user' do 

    # settings & cancellation 
    get '/cancel' => 'users/registrations#cancel', as: 'cancel_user_registration' 
    get '/settings' => 'users/registrations#edit', as: 'edit_user_registration' 
    patch '/settings' => 'users/registrations#update' 

    # account deletion 
    delete '' => 'users/registrations#destroy' 

end 

Я изменил put к patch, потому что я использую Rails 4 (это правильно?).

Это мой form_for тег в views/users/registrations/edit.html.erb:

<%= form_for(resource, as: resource_name, 
          url: registration_path(resource_name), 
          html: { method: :patch }) do |f| %> 

При попытке обновить настройки для пользователя с указанным выше кодом, я получаю внутреннюю ошибку сервера на 500. Отправка формы пытается загрузить /register (моя страница регистрации), которая, безусловно, не правильная. (я думаю, что это суть проблемы, но я не понимаю, как это исправить, как я очень начинающий.)

При попытке обновить настройки для пользователя с оригинальным put методом (вместо patch), я получаю ту же проблему.

Мой веб-сервер разработки говорит:

ActionController::RoutingError (No route matches [PUT] "/register"): 

Спасибо заранее.

EDIT: Добавлено rake routes.

    Prefix Verb URI Pattern      Controller#Action 
    new_user_registration GET /register(.:format)    users/registrations#new 
     user_registration POST /register(.:format)    users/registrations#create 
cancel_user_registration GET /user/cancel(.:format)   users/registrations#cancel 
    edit_user_registration GET /user/settings(.:format)  users/registrations#edit 
       settings PUT /user/settings(.:format)  users/registrations#update 
         DELETE /user(.:format)     users/registrations#destroy 

EDIT 2: Это то, что rakes routes выглядит, когда я удалить пользовательские маршруты и пусть регистрации ручки DEViSE вид и т.д .:

    Prefix Verb URI Pattern      Controller#Action 
    new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
     user_registration POST /users(.:format)    devise/registrations#create 
cancel_user_registration GET /users/cancel(.:format)   devise/registrations#cancel 
    edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
         PATCH /users(.:format)    devise/registrations#update 
         PUT /users(.:format)    devise/registrations#update 
         DELETE /users(.:format)    devise/registrations#destroy 

РАБОЧИЕ:

routes.rb:

get 'settings' => 'users/registrations#edit', as: 'edit_user_registration' 
put 'settings/:id' => 'users/registrations#update', as: 'update_user_registration' 

edit.html.erb:

<%= form_for(resource, as: resource_name, 
         url: update_user_registration_path(resource_name), 
         html: { method: :put }) do |f| %> 
+0

Пожалуйста, разместите вывод 'rake routes'. – Pavan

+0

Ok @Pavan, см. Выше. –

+0

Попробуйте изменить url как 'settings_path (resource_name)' – Pavan

ответ

1

Проблема заключается в том, что registration_path является представлением формы в /register, которая для новых пользователей, но вы пытаетесь изменить существующий User объект, так что вам нужно подать на правильный путь обновления. По умолчанию это PUT /users/:id, который вы видите при удалении своих конфигураций.

Похоже, что ваши настройки установили путь обновления User к PUT /user/settings, поэтому попробуйте url: settings_path. Вы стремитесь к действию users/registrations#update действий видно из следующих строк:

  Prefix Verb URI Pattern      Controller#Action 
      settings PUT /user/settings(.:format)  users/registrations#update 
+1

Спасибо, ты прав. Я добавлю рабочий код выше. –

+0

Спасибо за рабочий код - мне было интересно, нужен ли вам '/: id', или если контроллер вывел его из вошедшего в систему пользователя. –

Смежные вопросы