2017-09-06 4 views
1

Appelant pour la première fois, écoute longue durée. J'ai un problème avec mes associations Rails. Mon objectif est de créer un site Web d'événements où les utilisateurs peuvent créer des événements et participer à des événements. J'ai créé mes modèles utilisateurs et événements et associations telles que:Rails aucune association d'erreur de méthode

class Event 
    belongs_to :creator, :class_name => "User" 
    ... 
end 

class User 
    has_many :created_events, :foreign_key => "creator_id", :class_name => "Event", dependent: :destroy 
    ... 
end 

Mon modèle d'événement ne dispose que d'une description et creator_id clé étrangère, où mon utilisateur a juste un champ de nom. Mais je reçois une erreur sans méthode lorsque j'essaie d'utiliser @event = current_user.events.build. current_user utilise juste des sessions pour retourner l'ID utilisateur

Je ne peux pas pour la vie de moi comprendre pourquoi Im obtenir cette erreur.

J'ai le projet complet sur this Github repository.

+0

N'oubliez pas de consulter le [guide de style] (https://meta.stackexchange.com/questions/18614/style-guide-for-questions-and-answers), vous devriez toujours essayer de formater le code mieux que possible. – Oxfist

+0

Si 'current_user' est juste l'identifiant de l'utilisateur, alors c'est un nombre qui n'est pas une instance de la classe User, c'est pourquoi il n'y a pas de méthode' events'. Utilisez cet id pour obtenir l'utilisateur que vous voulez avec quelque chose comme 'User.find (current_user)'. – Oxfist

+2

la classe 'User'' has_many: created_events', pas 'has_many: events'. Donc, essayez 'current_user.created_events.build' au lieu de' current_user.events.build'. – jvillian

Répondre

1

classe Userhas_many :created_events, et non has_many :events. Donc, essayez current_user.created_events.build au lieu de current_user.events.build.

+0

en ajoutant à cette réponse, n'oubliez pas de sauvegarder le nouvel événement en appelant: @ event.save après avoir manipulé les attributs d'événement (date/description), car la méthode 'build' ne crée qu'une instance en mémoire. 'save' le fera persister dans la base de données. –