2010-09-07 7 views
1

Rails 3 débutants ici .... Je cherche à construire une application qui limite les données visibles d'un utilisateur à leur entreprise, qui est basée sur le domaine de leur e-mail. Très semblable à Yammer ou au camp de base. Je suis actuellement à l'aide pour concevoir auth ...Rails 3, after_create dans user.rb pour créer une association d'instance?

Je voudrais une table de l'utilisateur puis un tableau UserInstance ... La table UserInstance ressemblerait à ceci:

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

Je voudrais que la chaque enregistrement dans la table utilisateur pour avoir un ID d'instance qui a un ID de la table UserInstance. Lors de l'enregistrement, UserInstance est trouvé ou affecté (unique) .... Ensuite, tous les enregistrements de la base de données auront un identificateur d'instance. Maintenant que tous les utilisateurs sont assignés à un instanceID ... Je voudrais que tout ce que l'utilisateur connecté voit dans le site soit uniquement pour son instance ID, donc les informations de la société sont silo'd.

Question: 1. Comment modifier concevoir pour soutenir la table UserInstance, à créer ou affecté, puis affecté instanceID sur l'enregistrement

Jusqu'à présent, je suis ici, /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 

Ce que je voudrais voir se produire dans assign_user_to_instance est comme suit:

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 

Toute aide mise en œuvre du code pseudo Abov Nous serions grandement appréciés.

Merci!

Répondre

2

modèle utilisateur:

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 

et vous avez besoin d'une migration comme ceci:

> rails g migration AddUserInstanceToUser 

La migration devrait ressembler à ceci:

class AddUserInstanceToUser < ActiveRecord::Migration 
    self.up 
    add_column :users, :instance_id, :integer 
    end 
    self.down 
    remove_column :users, :instance_id 
    end 
end 
+0

C'est agréable! Je vous remercie. Des suggestions sur la façon de mettre à jour ma table utilisateur de concevoir? Dois-je ajouter une migration qui ajoute une colonne instance_id ou existe-t-il une approche belongs_to type qui effectue automatiquement cette relation? – AnApprentice

+1

Voir ma mise à jour – jigfox

+0

Merci, c'est génial – AnApprentice

Questions connexes