Ruby on rails 定制设计注册编辑/更新路线和视图
我刚开始使用Desive,并进行了一些定制:Ruby on rails 定制设计注册编辑/更新路线和视图,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我刚开始使用Desive,并进行了一些定制: 我已生成视图并自定义视图(注册表单等) 我已经生成了控制器,因此可以在那里进行一些更改 我定制了路线,主要是根据以下帖子: 除了“编辑用户注册”功能(用户可以更改电子邮件和密码或删除帐户的视图),其他功能都很好 这是我在config/routes.rb中注册的内容(省略与注册控制器无关的部分): 我将put更改为patch,因为我使用的是Rails 4(是否正确?) 这是我在视图/users/registrations/edit.html.erb
- 我已生成视图并自定义视图(注册表单等)
- 我已经生成了控制器,因此可以在那里进行一些更改
- 我定制了路线,主要是根据以下帖子:
config/routes.rb
中注册的内容(省略与注册控制器无关的部分):
我将put
更改为patch
,因为我使用的是Rails 4(是否正确?)
这是我在视图/users/registrations/edit.html.erb
中标记的表格:
<%= form_for(resource, as: resource_name,
url: registration_path(resource_name),
html: { method: :patch }) do |f| %>
提前谢谢
编辑:在下面添加了rake路由
输出
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
编辑2:这就是当我删除自定义路线并让Deviate处理注册视图等时,搜索路线的样子:
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
工作:
路由。rb:
get 'settings' => 'users/registrations#edit', as: 'edit_user_registration'
put 'settings/:id' => 'users/registrations#update', as: 'update_user_registration'
<%= form_for(resource, as: resource_name,
url: update_user_registration_path(resource_name),
html: { method: :put }) do |f| %>
edit.html.erb:
get 'settings' => 'users/registrations#edit', as: 'edit_user_registration'
put 'settings/:id' => 'users/registrations#update', as: 'update_user_registration'
<%= form_for(resource, as: resource_name,
url: update_user_registration_path(resource_name),
html: { method: :put }) do |f| %>
问题在于注册路径
正在将表单提交到新用户的/register
,但您正在尝试编辑现有的用户
对象,因此需要提交到正确的更新路径。默认情况下,这是删除配置时看到的PUT/users/:id
看起来您的自定义设置已将User
更新路径设置为PUT/User/settings
,因此请尝试url:settings\u path
。您的目标是此行中显示的用户/注册#更新操作:
Prefix Verb URI Pattern Controller#Action
settings PUT /user/settings(.:format) users/registrations#update
请发布rake路由
输出。确定@Pavan,请参见上文。尝试将url更改为settings\u路径(资源名称)
@Pavan我试过了,它引发了以下问题:ActionController::UnknownFormat in Users::RegistrationsController#update
它尝试加载的URL是http://localhost:3000/user/settings.user
我在上面添加了另一组rake路由。比较两者,Desive自己的设置中有一条额外的路线,所以我想我需要添加这个?谢谢,你是对的。我将在上面添加工作代码。感谢您提供的工作代码-我想知道您是否需要/:id
,或者控制器是否从登录的用户推断它。