рельсы, расширяющие разработку формы регистрации - PullRequest
3 голосов
/ 03 декабря 2011

Я работаю в системе, в которой есть 2 модели, пользовательская модель, школьная модель.

Я использую регистрацию устройства для обычного пользователя sign_up с 'ролью' в качестве дополнительного поля дляукажите, является ли пользователь обычным пользователем или school_user.

На данный момент есть пользователь-администратор, который создает новую школьную запись, в то время как пользователь регистрируется с помощью действия devise / sign_up.Школа еще не имеет регистрационной информации.

Я могу позвонить в школу / новое действие (как ссылку на регистрацию в школе), чтобы добавить новую школу.

Вместо этого я хочу продлить регистрацию устройства для школы, которая будет регистрироваться с использованием «регистрации в новой школе».ссылка «как новый пользователь (используйте электронную почту, пароль, роль =« школа »для модели пользователя) и другие поля, такие как имя, адрес и т. д., входящие в таблицу обычных школ.Таким образом, администратор школы также получает учетную запись.

Как мне расширить форму разработки / регистрации и создать эти 2 записи?

Я действительно ценю несколько мыслей.

1 Ответ

0 голосов
/ 22 июля 2014

Переопределить устройство регистрации маршрутов:

rout.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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...