1

我喜欢 Turbinehq 如何让您一步完成为您的公司创建管理员帐户和子域。测试它,我发现在为他们的公司创建子域后,他们可以通过电子邮件邀请用户。对邀请采取行动的用户自动成为同一公司的一部分。

我想在 Rails 中模拟这个过程。我尝试了这个入门应用程序,但它的限制不够。我遇到的第一个问题是关于如何设计下面的表格:

  • 它是一个嵌套资源吗?--比如说一个Company具有accepts_nested_attributes_for :users...的模型?
  • 有没有更好的方法来设置它?
  • 如果这确实是设置,如何为所有该“管理员”用户的受邀者预先设置公司名称?
  • 我正在尝试做的事情有什么流行的指南吗?

TurbineHQ 的帐户创建视图

4

1 回答 1

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"

希望能帮助到你..

于 2012-11-28T01:01:50.453 回答