首页 文章

铁路延伸设计登记表

提问于
浏览
3

我正在研究一个系统,它有2个模型,一个用户模型,一个学校模型 .

我正在使用普通用户sign_up的设计注册,并将'role'作为附加字段来指示用户是普通用户还是school_user .

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

我可以打电话给学校/新行动(作为学校注册链接)添加一所新学校 .

相反,我想扩展学校的设计注册,该注册将使用“新学校注册链接”作为新用户注册(使用电子邮件,密码,用户模型的角色='学校')以及其他字段,如姓名,地址等进入正规学校的 table . 这样学校管理员也可以获得登录帐户 .

如何扩展设计/注册表单并创建这2条记录?

我真的很感激 .

1 回答

  • 0

    覆盖设计注册路由:

    routes.rb:

    devise_for :users, controllers: {registrations: 'registrations'}
    

    创建controllers / registrations_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 User < ActiveRecord::Base
        # Include default devise modules. Others available are:
        # :confirmable, :lockable, :timeoutable and :omniauthable
    
        devise :database_authenticatable, :registerable,
               :recoverable, :rememberable, :trackable, :validatable
    
        validates :name,
                  presence: true,
                  length: {in: 1..50}
    
        validates :school_name,
                  presence: true,
                  length: {in: 1..50}
    end
    

    仅供参考:

    <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
        <%= devise_error_messages! %>
    
        <div><%= f.label :school_name %>
            
    <%= f.text_field :name, autofocus: true %></div> <div><%= f.label :email %>
    <%= f.email_field :email %></div> # ... <div><%= f.label :school_name %>
    <%= f.text_field :school_name %></div> <div><%= f.submit "Sign up" %></div> <% end %>

相关问题