2011-01-27 2 views
0

J'utilise rails3 + mongoid + concevoir pour créer une application. J'ai des utilisateurs, et chaque utilisateur peut avoir des appontements, je me demande si je devrais stocker explicitement un user_id dans le document de rendez-vous ou comment obtenir mongoid pour manipuler ceci automatiquement avec la relation définie.Mongoid Relational Associations

Les modèles de l'utilisateur et rendez-vous sont les suivantes

class User 
    include Mongoid::Document 
    devise: database_authenticable, :registerable, :recoverable, :rememberable, :trackable, :validatable 

    field :username 
    validates_presence_of :username 
    validates_uniqueness_of :name, :email, :case_sensitive => false 
    attr_accessible :name, :email, :password, :password_confirmation 

    references_many :appointments 
end 

class Appointment 
    include Mongoid::Document 

    field :date, :type => Date, :default => Date.today 
    referenced_in :user 
end 

Je me demande comment s'y prendre pour créer la nomination et l'avoir associé à l'utilisateur connecté en cours (en utilisant current_user concevoir).

Un conseil sur le workout_controller suivant, en particulier la ligne 2?

def create 
    @appointment = current_user.Appointment.new(params[:appointment]) 
    if @appointment.save 
    redirect_to(:action => 'show', :id => @appointment._id) 
    else 
    render('edit') 
    end 
end 

Répondre

1

Tout d'abord, je crois que votre dernière ligne de la classe Appointment devrait dire referenced_in :user au lieu de :person.

Ensuite, vous devriez être en mesure de fixer la ligne 2 de votre contrôleur comme suit:

@appointment = current_user.appointments.new(params[:appointment]) 

après l'avoir enregistré, current_user.appointments devrait inclure le nouveau rendez-vous.

+0

Oups, la: personne au lieu de: l'utilisateur était une faute de frappe de ma part. Mais, oui, ça marche maintenant, génial. Vous avez oublié d'utiliser "rendez-vous.nouveau" au lieu de "rendez-vous.nouveau" – Hutch