Ruby on rails 设计注册表格

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

我正在开发一个系统,它有两个模型,一个用户模型,一个学校模型

我使用Desive registration for a regular user sign_up with'role'作为附加字段来指示用户是普通用户还是学校用户

目前,有一个管理员用户创建新的学校记录,而用户将使用设计/注册操作进行注册。学校还没有登录信息

我可以致电学校/新行动(作为学校注册链接)添加新学校

相反,我想扩展Desive registration for school,它将使用“new school signup link”作为新用户(使用电子邮件、密码、角色='school'作为用户模型)和其他字段(如姓名、地址等)注册到常规学校表中。这样学校管理员也可以获得一个登录帐户

我如何扩展设计/注册表格并创建这两项记录


我真的很感激你的一些想法。

覆盖设计注册路线:

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 %>