Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 定制设计注册编辑/更新路线和视图_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails 定制设计注册编辑/更新路线和视图

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

我刚开始使用Desive,并进行了一些定制:

  • 我已生成视图并自定义视图(注册表单等)
  • 我已经生成了控制器,因此可以在那里进行一些更改
  • 我定制了路线,主要是根据以下帖子:
除了“编辑用户注册”功能(用户可以更改电子邮件和密码或删除帐户的视图),其他功能都很好

这是我在
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
,或者控制器是否从登录的用户推断它。