这是我第一次尝试为现有模型添加设计可验证性。
我在一个非常重要的例子中重现了这个问题(在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”按钮。
毫不奇怪,这就是我得到的,这是我的脚手架的结果:
但是现在让我们按下“创建自定义用户”按钮。
此处 我们将得到什么:
惊人即可。从我的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)如果是这样的话,我该如何解决??
答案 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