我刚开始使用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
答案 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