自定义设计注册编辑/更新路径和视图

时间:2015-06-13 15:38:53

标签: ruby-on-rails ruby devise

我刚开始使用Devise,我做了一些自定义:

除了edit_user_registration之外(用户可以更改其电子邮件和密码或删除其帐户的视图),一切都很有效。

这是cell.contentView.viewWithTag(tagNumber)中注册的内容(省略了与注册控制器无关的部分):

UITableViewCell

我将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 因为我正在使用Rails 4(这是正确的吗?)。

这是put中的form_for标记:

patch

当我尝试使用上述代码更新用户的设置时,出现500内部服务器错误。提交表单会尝试加载views/users/registrations/edit.html.erb(我的注册页面),这肯定是不对的。 (我认为这是问题的核心,但我不明白如何修复它,因为我是一个初学者。)

当我尝试使用原始<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :patch }) do |f| %> 方法(而不是/register)更新用户的设置时,我遇到了同样的问题。

我的开发网络服务器说:

put

提前致谢。

编辑:在下面添加了patch输出。

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

编辑2:当我删除自定义路线并让Devise处理注册视图等时,这就是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

WORKING:

的routes.rb

rakes routes

edit.html.erb

                  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

1 个答案:

答案 0 :(得分: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
相关问题