Rails 3, after_create в user.rb для создания ассоциации экземпляров? - PullRequest
1 голос
/ 07 сентября 2010

Rails 3 новичок здесь ... Я ищу создание приложения, которое ограничивает данные пользователя для просмотра его компанией, основываясь на домене их электронной почты. Очень похоже на Yammer или basecamp. В настоящее время я использую устройство для аутентификации ...

Я бы хотел таблицу пользователя, а затем таблицу пользовательского экземпляра ... Таблица пользовательского экземпляра будет выглядеть следующим образом:

ID | domain 
 1 | yahoo.com 
 2 | github.com 
 3 | abc.com

Я бы хотел, чтобы каждая запись в пользовательской таблице имела InstanceID с идентификатором из таблицы UserInstance. Во время регистрации UserInstance либо найден, либо назначен (уникальный) .... Тогда все записи в БД будут иметь InstanceID. Теперь, когда все пользователи назначены на instanceID ... Мне бы хотелось, чтобы все, что зарегистрированный пользователь видел на сайте, было только для их InstanceID, поэтому информация о компании - это бестолковая.

Вопрос: 1. Как изменить devise для поддержки таблицы UserInstance, назначить или создать, а затем назначить instanceID при регистрации

Пока я здесь, /app/models/user.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  attr_accessible :email, :password, :password_confirmation, :remember_me

    after_create :assign_user_to_instance

    def assign_user_to_instance
        logger.debug "Called after the account was created"
    end

end

То, что я хотел бы увидеть в assign_user_to_instance, выглядит следующим образом:

def assign_user_to_instance
 Step 1, extract the user's domain from the email address they just registered with
 Step 2, does this domain from s1 exist in the UserInstance Table (domain)?
 Step 2b, if not create it and grab the UserInstance.ID
 Step 2c, if it does, grab the already available UserInstanceID
 Step 3, assign the UserInstanceID to the user's record in the user table
end

Буду признателен за любую помощь в реализации приведенного выше псевдокода.

Спасибо!

1 Ответ

2 голосов
/ 07 сентября 2010

Модель пользователя:

class User < ActiveRecord::Base
  # devise stuff
  belongs_to :instance, :class => 'UserInstance'
  def assign_user_to_instance
    domain = email.split("@").last
    user_instance = UserInstance.find_or_create_by_domain domain
    update_attribute(:instance_id, user_instance.id) #or whatever you called this field
  end
end

, и вам нужна такая миграция:

> rails g migration AddUserInstanceToUser

Миграция должна выглядеть следующим образом:

class AddUserInstanceToUser < ActiveRecord::Migration
  self.up
    add_column :users, :instance_id, :integer
  end
  self.down
    remove_column :users, :instance_id
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...