2016-09-20 14 views
0

Ich versuche eine App zu schreiben, mit der sich Benutzer für Veranstaltungen anmelden können. Jede Veranstaltung hat ihren Besitzer und Nutzer, die an der Veranstaltung teilnehmen möchten. Ich habe Schwierigkeiten, die richtige Zuordnung für Letzteres zu wählen. Ich habe versucht, has_and_belongs_to_many, aber lesen Sie irgendwo, dass es nicht empfohlen, es zu verwenden, also habe ich versucht mit has_many: durch und es scheint nicht zu funktionieren. Dies ist, was ich mit jetzt kam:Welche Rails Association sollte ich verwenden?

class User < ApplicationRecord 
    has_secure_password 

    has_many :events, :foreign_key => :owner_id 
    has_many :event_users 
    has_many :events, :through => :event_users 
end 

class Event < ApplicationRecord 
    belongs_to :user, :foreign_key => :owner_id 
    has_many :event_users 
    has_many :users, :through => :event_users 
end 

class EventUser < ApplicationRecord 
    has_many :users 
    has_many :events 
end 

Und die Registrierung Code sieht wie folgt aus:

def sign_up 
    user = User.find(session[:user_id]) 
    @event.users << user 
end 

Dieser Code gibt einen Fehler zurück:

Cannot modify association 'Event#users' because the source reflection class 'User' is associated to 'EventUser' via :has_many. 

Könnt ihr mir sagen, Was mache ich falsch und wie mache ich das richtig? Es ist meine erste ernsthafte Rails App und ich möchte sie wirklich richtig schreiben. Danke im Voraus.

Antwort

0

Wahrscheinlich möchten Sie den Besitzer von den Gästen unterscheiden. Ich würde dies tun:

#models/event.rb 
    belongs_to :owner, class_name: "User" 
    has_many :guests, class_name: "User", through: :event_users 
    has_many :event_users 

#models/eventuser.rb 
    belongs_to :users 
    belongs_to :events 

#models/user.rb 
    has_many :event_users 
    has_many :events, through: :event_users 
    has_many :event_ownerships, class_name: "Event" 

extrem wichtiger Punkt hier ist EventUser (n) sind belongs_to die viele zu viele Beziehung haben Sie angegeben.

Außerdem können Sie die Verknüpfung user.events nicht neu definieren, Sie müssen sie umbenennen.

Verwandte Themen