Как пригласить новых пользователей на конкретный поддомен в рельсах
Мне нравится, как Turbinehq позволяет вам создать учетную запись администратора и поддомен для вашей компании за один шаг. Протестировав это, я обнаружил, что после создания субдомена для своей компании они могут приглашать пользователей по электронной почте. Пользователи, действующие по приглашению, автоматически становятся частью одной компании.
Я хотел бы подражать этому процессу в рельсах. Я попробовал это стартовое приложение, но оно не достаточно ограничительно. Первый вопрос, который у меня есть, касается того, как можно создать форму ниже:
- Это вложенный ресурс?
Company
модель, имеющаяaccepts_nested_attributes_for :users
...? - Есть ли лучший способ настроить это?
- Если это действительно настройка, то как можно заранее установить название компании для всех приглашенных пользователей с правами администратора?
- Есть ли какие-нибудь популярные руководства по тому, что я пытаюсь сделать?
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"
Надеюсь, поможет..