2017-11-11 3 views
1

Ich versuche, eine App mit einem "Personen" -Modell, einem "Ereignis" -Modell und einem "event_person" -Modell zu erstellen, um die Details zu speichern, an denen die Leute teilnehmen welche Ereignisse.So richten Sie ein Durchgangsmodell in Ruby on Rails ein

Ich habe dies eingerichtet, so gibt es viele Ereignisse für jede Person, die durch das event_person-Modell beziehen. Allerdings bekomme ich beim Ausführen der App einen Fehler und ich kann nicht verstehen, was ich falsch gemacht habe.

Person Modell:

class Person < ActiveRecord::Base 
belongs_to :team 
has_many :events, through: :event_people 
validates :first_name, presence: true, length: { maximum: 255 } 
validates :last_name, presence: true, length: { maximum: 255 } 
validates :email, presence: true, length: { maximum: 255 } 
scope :ards, ->{ where("team_id = ?",2)} 
end 

Event-Modell:

class Event < ApplicationRecord 
belongs_to :people 
validates :name, presence: true 
end 

Event_person Modell:

class EventPerson < Event 
belongs_to :people 
belongs_to :events 
#accepts_nested_attributes_for :events, :people 
validates :role, presence: true, length: { maximum: 20 } 
end 

Der Fehler, den ich bekommen ist

Could not find the association :event_people in model Person 

wenn ich versuche, und einen Eintrag in der Personen-Modell zeigen, und zeigt eine Zeile in meiner people_controller.rb Datei:

def show 
    @people = Person.find(params[:id]) 
    @events = @people.events 
end 

Die Linie ist es @events = @people.events als das Problem beleuchtet, aber wie ich kann nicht scheinen zu finde heraus, was ich falsch gemacht habe.

Alle Hinweise sehr geschätzt.

Dank

Antwort

2

Sie verpassen has_many :event_people auf Person:

class Person < ActiveRecord::Base 
    ... 
    has_many :event_people 
    has_many :events, through: :event_people 
    ... 
end 

Auch dies scheint alles munged up:

class EventPerson < Event 
    belongs_to :people 
    belongs_to :events 
    ... 
end 

I EventPerson von ApplicationRecord erben erwarten würde, nicht Event . Und, people und events in ihrer Singularform zu sein?

class EventPerson < ApplicationRecord 
    belongs_to :person 
    belongs_to :event 
    ... 
end 

Ich weiß nicht wirklich, was Sie mit people, hier zu tun versuchen:

class Event < ApplicationRecord 
    belongs_to :people 
    ... 
end 

Vielleicht eigentlich gemeint Sie:

class Event < ApplicationRecord 
    has_many :event_people 
    has_many :people, through: :event_people 
    ... 
end 

Außerdem ist es ein wenig seltsam, zu sagen @people = Person.find(params[:id]) hier:

def show 
    @people = Person.find(params[:id]) 
    @events = @people.events 
end 

Weil Person.find(params[:id]) einen einzelnen Datensatz zurückgibt, keine Sammlung von Datensätzen. Ich würde erwarten zu sehen:

def show 
    @person = Person.find(params[:id]) 
    @events = @person.events 
end 
+0

Vielen Dank dafür. Bin ein Newcomer in all diesen MVC/Ruby on Rails-Sachen, also habe ich Mühe, mich mit der Singularität/Pluralität der Namenskonventionen vertraut zu machen. Ich habe die vorgeschlagenen Änderungen vorgenommen und einen neuen interessanten Fehler erhalten: 'Mysql2 :: Fehler: Unbekannte Spalte 'event_people_events.person_id' in 'Where-Klausel': SELECT' events'.* FROM 'Ereignisse' INNER JOIN' Ereignisse' 'event_people_events' ON' Ereignisse'.id' = 'event_people_events''event_id' WHERE' event_people_events'.person_id' = 6' –

+0

Es sucht nach einer Tabelle namens event_people_events, die ist falsch, und ich vermute, irgendwo liegt ein Problem mit der Namensgebung. Aber wo? –

+0

Ich fand es heraus: 'Klasse EventPerson