Ruby on rails 设计注册表格
我正在开发一个系统,它有两个模型,一个用户模型,一个学校模型 我使用Desive registration for a regular user sign_up with'role'作为附加字段来指示用户是普通用户还是学校用户 目前,有一个管理员用户创建新的学校记录,而用户将使用设计/注册操作进行注册。学校还没有登录信息 我可以致电学校/新行动(作为学校注册链接)添加新学校 相反,我想扩展Desive registration for school,它将使用“new school signup link”作为新用户(使用电子邮件、密码、角色='school'作为用户模型)和其他字段(如姓名、地址等)注册到常规学校表中。这样学校管理员也可以获得一个登录帐户 我如何扩展设计/注册表格并创建这两项记录Ruby on rails 设计注册表格,ruby-on-rails,devise,registration,Ruby On Rails,Devise,Registration,我正在开发一个系统,它有两个模型,一个用户模型,一个学校模型 我使用Desive registration for a regular user sign_up with'role'作为附加字段来指示用户是普通用户还是学校用户 目前,有一个管理员用户创建新的学校记录,而用户将使用设计/注册操作进行注册。学校还没有登录信息 我可以致电学校/新行动(作为学校注册链接)添加新学校 相反,我想扩展Desive registration for school,它将使用“new school signup
我真的很感激你的一些想法。覆盖设计注册路线: routes.rb:
devise_for :users, controllers: {registrations: 'registrations'}
创建控制器/注册\u controller.rb:
class RegistrationsController < Devise::RegistrationsController
after_filter :add_school
protected
def add_school
if resource.persisted? # user is created successfuly
# resource holds all your form data.
resource.schools.build do |school|
school.name = resource.school_name # form fields...
end
@school.save
end
end
end
类注册控制器
要验证学校字段,请向user.rb模型添加验证
例如:
class用户
仅供参考:
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :school_name %>
<br/>
<%= f.text_field :name, autofocus: true %></div>
<div><%= f.label :email %>
<br/>
<%= f.email_field :email %></div>
# ...
<div><%= f.label :school_name %>
<br/>
<%= f.text_field :school_name %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
# ...
有什么想法吗?没有一个我在考虑可能会扩展school/new.html.erb以使用“form_tag”而不是“form_for”,扩展表单以包括用户模型参数,如email/password/role。阅读create_action中的参数,创建这两个记录(用户模型和学校模型)。这有什么意义吗?我真的很感激任何能引导我走向正确方向的想法。谢谢,没关系。让它工作起来。通过覆盖Desive的注册和视图。我建议输入您的答案!
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :school_name %>
<br/>
<%= f.text_field :name, autofocus: true %></div>
<div><%= f.label :email %>
<br/>
<%= f.email_field :email %></div>
# ...
<div><%= f.label :school_name %>
<br/>
<%= f.text_field :school_name %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>