使用现有模型设计会创建重叠路线

时间:2014-09-19 13:59:05

标签: ruby-on-rails devise

这是我第一次尝试为现有模型添加设计可验证性。
我在一个非常重要的例子中重现了这个问题(在ruby 2.1.1上测试,rails 4.1.5,设计3.3.0)。

$ rails new devise_sample1 --database=postgresql

然后我创建了模型:

$ rails g scaffold custom_user name surname date_of_birth:date

请记住,我的模型名为'custom_user'。

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

现在让我们添加设计,在Gemfile中添加以下行:

gem 'devise'

作为第一步,设计需要安装:

$ rails g devise:install

这又需要在config / environments / development.rb中添加以下行:

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

此时我已准备好将设计推向现有模型:

rails generate devise custom_user

到目前为止一切顺利;再次迁移并启动服务器并连接到

http://localhost:3000/customer_users 

通过浏览器;按下“new customer_user”按钮。

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

enter image description here

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

此处 我们将得到什么

enter image description here

惊人即可。从我的custom_user表单,我最终到设计的注册表单。这意味着路线混合良好。

让我们来看看它们:

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)               custom_users#create

恰好是以下的路线:

POST   /custom_users(.:format)               devise/registrations#create

其他路线似乎不是偶然而非设计重叠,所以我有两个问题。

1)这是在现有模型上整合设计的方式还是我失去了一些基本步骤?

2)如果是这样的话,我该如何解决?

2 个答案:

答案 0 :(得分:1)

您的custom_user创建应该通过devise registration控制器进行。要使用设计使用new_custom_user_registration_path创建/注册新的custom_user(这会将您转到/custom_users/sign_up),而不是new_custom_user_path/custom_users/new)。即使您要编辑custom_user个人资料,也请使用edit_custom_user_registration_path代替edit_custom_user_path

如果要将其他custom_user属性添加到sign_up表单,可以自定义设计视图。 See how to customize devise views

答案 1 :(得分:0)

更改

resources :custom_users

到另一条路:

resources :custom_users, path: 'custom_user'

这样,Devise将使用/custom_users
而Scaffolded观看次数将使用/custom_user