Ich habe gelernt, Schienen und ich habe ein Problem mit Beziehungen gestolpert. Ich habe viele-zu-viele Assoziationen User-Tournament, und aus irgendeinem Grund kann ich nicht auf beteiligte_Turniere auf User-Instanzen zugreifen oder kann nicht auf Teilnehmer in Turnier-Instanzen zugreifen.Schienen, has_many: durch undefined Methode `to_sym` für nil: NilClass
2.0.0-p643 :001 > Tournament.new.participants
NoMethodError: undefined method `to_sym' for nil:NilClass
from /home/marcin/.rvm/gems/ruby-2.0.0-p643/gems/activerecord-4.1.8/lib/active_record/reflection.rb:100:in `_reflect_on_association'
from /home/marcin/.rvm/gems/ruby-2.0.0-p643/gems/activerecord-4.1.8/lib/active_record/reflection.rb:537:in `source_reflection'
User-Modell
class User < ActiveRecord::Base
has_many :participants_tournaments
has_many :participated_tournaments, :through => :participants_tournaments
end
Turnier Modell
class Tournament < ActiveRecord::Base
has_many :participants_tournaments
has_many :participants, :through => :participants_tournaments
end
ParticipantsTournament Modell
class ParticipantsTournament < ActiveRecord::Base
belongs_to :tournament
belongs_to :user
end
ParticipantsTournament Migration
def change
create_table :participants_tournaments, :id => false do |t|
t.integer "tournament_id",
t.integer "user_id"
end
end
ich gelesen habe: This topic on SO, also this topic und beobachtete/Lese this railscast, aber ich kann nicht endlich scheinen, um es zu arbeiten.
Können Sie 't = Tournament.new' gefolgt von' t.participants' versuchen? – sixty4bit
mit has_many: through Ich bin mir ziemlich sicher, dass die Join-Tabelle eine ID-Spalte für Primärschlüssel benötigt. Wenn Sie also diese Tabelle erstellen, müssen Sie ': id => false 'in der Migration löschen. – maxhungry
@MaxHung Sie benötigen keine ID in einer Join-Tabelle. Sie brauchen nur IDs für die Dinge, die Sie beitreten. – Austio