2010-07-30 7 views
3

J'ai des événements et des utilisateurs/équipes.Joins Tables & Rails

class Event 
    has_many :users, :through => :registrations 
end 
class User 
    has_many :events, :through => :registrations 
end 
class Registration 
    belongs_to :users 
    belongs_to :events 
end 

Quand j'enregistrer un utilisateur, je les connecter à l'événement comme ceci:

@event.users << @user 

Est-ce que cela crée implicitement l'objet d'enregistrement pour l'utilisateur/événement? J'ai mis une colonne: goal_amount dans ma migration d'inscription, et je voudrais être en mesure de définir le: goal_amount lorsque l'enregistrement est créé. Ai-je besoin de créer explicitement une inscription (ex: Registration.create(:user_id => @user.id, :event_id => @event.id, :goal_amount => params[:goal_amount]) pour y arriver

Répondre

2

Oui, ajouter un utilisateur à un événement crée automatiquement l'objet relation
Et oui, vous devez créer manuellement la relation si vous souhaitez ajouter?. ce paramètre dans la table du milieu.

une solution pour le faire paraître plus fraîche serait de créer une méthode add_user dans l'objet de l'événement.

def add_user user, goal_amount 
    Registration.create({ 
     :user => user, 
     :event => self, 
     :goal_amount => goal_amount) 
    }) 
end 

il vous suffit d'appeler

@event.add_user @user, 100 
+0

Merci! Cela a fonctionné parfaitement :) –

+0

Marquer ma réponse comme acceptée alors;) –