Ruby on rails 使用现有模型设计会创建重叠的路线

Ruby on rails 使用现有模型设计会创建重叠的路线,ruby-on-rails,devise,Ruby On Rails,Devise,这是我第一次尝试将designe身份验证添加到已经存在的模型中 我在一个非常重要的示例中重现了这个问题(在ruby 2.1.1、rails 4.1.5、Desive 3.3.0上进行了测试) 然后我创建了模型: $ rails g scaffold custom_user name surname date_of_birth:date 请记住,我的模型称为“自定义用户” 然后我调整了数据库配置,创建并迁移了数据库 现在,让我们添加Desive,在GEM文件中添加以下行: gem 'devise

这是我第一次尝试将designe身份验证添加到已经存在的模型中
我在一个非常重要的示例中重现了这个问题(在ruby 2.1.1、rails 4.1.5、Desive 3.3.0上进行了测试)

然后我创建了模型:

$ rails g scaffold custom_user name surname date_of_birth:date
请记住,我的模型称为“自定义用户”

然后我调整了数据库配置,创建并迁移了数据库

现在,让我们添加Desive,在GEM文件中添加以下行:

gem 'devise'
作为第一步,Deave需要安装:

$ rails g devise:install
这反过来需要在config/environments/development.rb中添加以下行:

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
此时,我准备将Desive推进到现有模型中:

rails generate devise custom_user
到目前为止还不错;再次迁移并启动服务器并连接到

http://localhost:3000/customer_users 
通过浏览器;按下“新客户\用户”按钮

毫不奇怪,我得到的是,这是我脚手架的结果:

现在让我们按下“创建自定义用户”按钮

这里是我们将得到的:

太棒了。从我的自定义用户表单,我最终得到了Desive的注册表单。这意味着路线是相互混合的

让我们来看看它们:

GET /custom_users/sign_in(.:format) devise/sessions#new POST /custom_users/sign_in(.:format) devise/sessions#create DELETE /custom_users/sign_out(.:format) devise/sessions#destroy POST /custom_users/password(.:format) devise/passwords#create ... (other password routes) GET /custom_users/cancel(.:format) devise/registrations#cancel POST /custom_users(.:format) devise/registrations#create GET /custom_users/sign_up(.:format) devise/registrations#new GET /custom_users/edit(.:format) devise/registrations#edit PATCH /custom_users(.:format) devise/registrations#update PUT /custom_users(.:format) devise/registrations#update DELETE /custom_users(.:format) devise/registrations#destroy GET /custom_users(.:format) custom_users#index POST /custom_users(.:format) custom_users#create GET /custom_users/new(.:format) custom_users#new GET /custom_users/:id/edit(.:format) custom_users#edit GET /custom_users/:id(.:format) custom_users#show PATCH /custom_users/:id(.:format) custom_users#update PUT /custom_users/:id(.:format) custom_users#update DELETE /custom_users/:id(.:format) custom_users#destroy 这恰好是相同的路线:

POST   /custom_users(.:format)               devise/registrations#create
其他路线似乎不是偶然而不是故意重叠的,所以我有两个问题。

1) 这是在现有模型上集成Desive的方法吗还是我失去了一些基本步骤?


2) 如果是这样,我该如何修复它呢?
您的
自定义用户
创建应该通过
设计注册
控制器进行。要使用设计使用
新建自定义用户注册路径
创建/注册新的自定义用户(该路径会将您路由到
/自定义用户/注册
)而不是
新建自定义用户路径
/custom\u users/new
)。即使要编辑自定义用户配置文件,也可以使用
编辑自定义用户注册路径
而不是
编辑自定义用户路径


如果您想添加其他自定义用户属性以注册表单,您可以自定义设备视图。

您可以为设备使用其他路由名称。我还添加了自己的控制器

rails generate devise:install
rails generate devise existingmodel

rake db:migrate

rails generate devise:controllers auth
config/routes.rb中

devise_for :users, class_name: :ExistingModel ,controllers: {
                   sessions: 'auth/sessions'
               }
它在我的环境中工作…

改变

resources :custom_users
到另一个路径:

resources :custom_users, path: 'custom_user'
这样,Desive将使用
/custom\u用户


虽然脚手架视图将使用
/custom\u user

简言之,您是说Deave采用了您的模型,但希望使用他的视图而不是您的视图吗?事实上,我不确定您的用例是什么。如果您想从
user
类创建用户,并使用
custom\u users/new
允许
(参数要求(:user).permit(:first_name,:last_name,:email,:password,:password_confirmation)
。将这些字段添加到表单中。但在这种情况下,我显示的提交会发生冲突,因此可能情况是这样的:如果我想使用我的视图,我应该删除“registerable”,而如果我想使用后者(并可能自定义它)然后我必须删除我的观点。假设它们都可以使用,但不能同时使用,它们不能很好地混合
resources :custom_users
resources :custom_users, path: 'custom_user'