1

Turbinehq を使用すると、会社の管理者アカウントとサブドメインをすべて 1 つのステップで作成できるのが気に入っています。テストしてみると、会社のサブドメインを作成した後、電子メールでユーザーを招待できることがわかりました。招待に応じたユーザーは、自動的に同じ会社の一員になります。

このプロセスをレールでエミュレートしたいと思います。このスターター アプリを試しましたが、制限が十分ではありません。私が持っている最初の質問は、以下のフォームをどのように設計するかを扱っています:

  • それはネストされたリソースですか? --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 に答える