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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top