2017-09-06 4 views
1

Erstes Anrufer, lange Zeit Zuhörer. Ich habe ein Problem mit meinen Rails-Verbindungen. Mein Ziel ist es, eine Event-Website zu erstellen, auf der Nutzer Events erstellen und an Veranstaltungen teilnehmen können. Ich habe meine Modelle Benutzer und Events und Verbände als wie geschaffen:Schienen keine Methode Fehler Assoziationen

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 

Mein Event-Modell hat nur eine Beschreibung und creator_id Fremdschlüssel, wo mein Benutzer nur ein Namensfeld hat. Aber ich bekomme keinen Fehler, wenn ich versuche, @event = current_user.events.build zu verwenden. current_user verwendet nur Sitzungen, um die Benutzer-ID

Ich kann nicht für das Leben von mir herausfinden, warum ich diesen Fehler bekommen.

Ich habe das vollständige Projekt auf this Github repository.

+0

Achten Sie darauf, die [style guide] (https://meta.stackexchange.com/questions/18614/style-guide-for-questions-and-answers) zu überprüfen, sollten Sie immer versuchen, den Code als zu formatieren so gut wie möglich. – Oxfist

+0

Wenn 'current_user' nur die Benutzer-ID ist, dann handelt es sich um eine Nummer, die keine Instanz der Klasse User ist. Deshalb gibt es keine 'events'-Methode. Verwenden Sie diese ID, um den gewünschten Benutzer mit "User.find (current_user)" zu erhalten. – Oxfist

+2

Klasse 'Benutzer'' has_many: created_events', nicht 'has_many: events'. Versuchen Sie also 'current_user.created_events.build' anstelle von' current_user.events.build'. – jvillian

Antwort

1

Klasse Userhas_many :created_events, nicht has_many :events. Versuchen Sie also current_user.created_events.build anstelle von current_user.events.build.

+0

zu dieser Antwort hinzufügen, vergessen Sie nicht, das neue Ereignis zu speichern, indem Sie nach der Manipulation von Ereignisattributen ('date/description')' @ event.save' aufrufen, da die Methode 'build' nur eine speicherinterne Instanz erstellt. 'save' wird es in der Datenbank beibehalten. –

Verwandte Themen