Как пригласить новых пользователей на конкретный поддомен в рельсах

Мне нравится, как Turbinehq позволяет вам создать учетную запись администратора и поддомен для вашей компании за один шаг. Протестировав это, я обнаружил, что после создания субдомена для своей компании они могут приглашать пользователей по электронной почте. Пользователи, действующие по приглашению, автоматически становятся частью одной компании.

Я хотел бы подражать этому процессу в рельсах. Я попробовал это стартовое приложение, но оно не достаточно ограничительно. Первый вопрос, который у меня есть, касается того, как можно создать форму ниже:

  • Это вложенный ресурс? Company модель, имеющая accepts_nested_attributes_for :users...?
  • Есть ли лучший способ настроить это?
  • Если это действительно настройка, то как можно заранее установить название компании для всех приглашенных пользователей с правами администратора?
  • Есть ли какие-нибудь популярные руководства по тому, что я пытаюсь сделать?

Представление создания учетной записи TurbineHQ

1 ответ

У меня была такая же проблема пару дней назад. Я нашел решение, которое отлично работает!

# models/company.rb
class Company < ActiveRecord::Base
  has_many :users, :dependent => :destroy

  validates :subdomain, :presence   => true,
                        :uniqueness => { :case_sensitive => false },
                        :length     => { :within => 4..20 },
                        :format     => { :with => /^[a-z0-9]+$/i }

  attr_accessible :name, :subdomain

end

# ======================================================================================

# models/user.rb
class User < ActiveRecord::Base
  before_create :create_company
  belongs_to :company

  validates :subdomain, :on         => :create,
                        :presence   => true,
                        :length     => { :within => 4..20 },
                        :format     => { :with => /^[a-z0-9]+$/i }

  validates_presence_of  :nome

  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable,
         :authentication_keys => [:subdomain]

  attr_accessor   :subdomain # VIRTUAL ATTRIBUTE
  attr_accessible :name, :email, :subdomain, :password, :password_confirmation,
                  :remember_me, :loginable_token

  private

    def create_company
     self.company = Company.create!(:subdomain => self.subdomain)
    end

end

# ======================================================================================

# example of registration form
= simple_form_for(resource, :as => resource_name, :url =>    registration_path(resource_name)) do |f|
  = devise_error_messages!

  %fieldset
    .clearfix= f.input :name,       :required => true
    .clearfix= f.input :email,      :required => true
    .clearfix= f.input :subdomain,  :required => true
    .clearfix= f.input :password,   :required => true, :input_html => {:minlength => 6}
    .clearfix= f.input :password_confirmation, :input_html => {:minlength => 6}

    .form-actions
      = f.submit t('labels.signup'), :class => 'btn btn-success'
    %p= render "links"

Надеюсь, поможет..

Другие вопросы по тегам