铁路延伸设计登记表

时间:2011-12-02 21:38:39

标签: ruby-on-rails devise registration

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

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

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

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

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

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

我真的很少有想法。

1 个答案:

答案 0 :(得分: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 %>
        <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 %>