Verschachtelte hat viele Durch Plugin und Scopes
-
24-09-2019 - |
Frage
Ich habe einen User-Modell (Name, Passwort,: E-Mail) und Event-Modell (Name,: etc) und Zinsmodell (: name) [> alle Singular <]
Dann habe ich kommen zwei Tabellen -> UsersInterests und EventsInterests; jeweils keinen Primärschlüssel enthalten, und nur der User_id / interest_id und event_id / interest_id jeweils zusammen. [> Plural <]
Verwenden Sie Meine Modelle der Nested hat viele Durch Plugin
user.rb => has_many :users_interests
has_many :interests, :through => :users_interests
has_many :events_interests, :through => :interests
has_many :events, :through => :events_interests
event.rb => has_many :events_interests
has_many :interests, :through => :events_interests
has_many :users_interests, :through => :interests
has_many :users, :through => :users_interests
interest.rb => has_and_belongs_to_many :users
has_and_belongs_to_many :events
events_interests.rb => belongs_to :interests
belongs_to :events
users_interests.rb => belongs_to :users
belongs_to :interests
Whew..ok Also ich wollte erstellt ein named_scope von, dass alle Ereignisse feststellen, dass Aktien Interesse mit einem bestimmten Benutzer. Hier ist ein Code jemand half mir mit.
named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
:conditions => {:users_interests => {:user_id => user}}
}}
Wenn ich von der Steuerung ausgeführt =>
@user = User.find(1)
@events = Event.shares_interest_with_user(@user)
ich den Fehler:
uninitialized constant Event::EventsInterest
Kann jemand sehen, was ich vermasselt?
Lösung
Sie müssen etwas falsch auf dem Weg benannt. Auf einen Blick würde ich sagen, Sie falsch benannt eine Datei oder Klasse. Denken Sie daran, Modellnamen muss immer singulär, sowohl in der Datei und Klassennamen oder auch Rails nicht die Verbindung herzustellen. Eine weitere Quelle für Ihr Problem ist, dass Argumente belongs_to auch singulär sein muss. Auch wenn Sie Dinge richtig gemacht hatten, hat die HABTM Beziehung Interessen mit den Nutzern würde einen Fehler ausgelöst, wenn Sie den benannten Umfang ausgeführt wird.
Ich konnte Ihre Fehler mit den folgenden Modellen lösen.
user.rb
class User < ActiveRecord::Base
has_many :users_interests
has_many :interests, :through => :users_interests
has_many :events_interests, :through => :interests
has_many :events, :through => :events_interests
end
users_interest.rb
class UsersInterest < ActiveRecord::Base
belongs_to :user
belongs_to :interest
end
interest.rb
class Interest < ActiveRecord::Base
has_many :users,:through => :users_interests
has_many :users_interests
has_many :events_interests
has_many :events, :through => :events_interests
end
** events_interest.rb
class EventsInterest <ActiveRecord::Base
belongs_to :interest
belongs_to :event
end
event.rb
class Event <ActiveRecord::Base
has_many :events_interests
has_many :interests, :through => :events_interests
has_many :users_interests, :through => :interests
has_many :users, :through => :users_interests
named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
:conditions => {:users_interests => {:user_id => user}}
}
}
end