Question

J'ai un modèle utilisateur (nom,: mot de passe,: e-mail), et le modèle de l'événement (nom,: etc) et le modèle d'intérêt (: nom) [> tout singulier <]

Alors j'ai créé deux tables de jointure -> UsersInterests et EventsInterests; chacun ne contenant pas de clé primaire, et seulement constituée de la user_id / interest_id et event_id / interest_id respectivement. [> Pluriel <]

Mes modèles Utilisez le Nested a beaucoup de travers 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 Je voulais donc créé un named_scope de ce trouver tous les événements qui partagent un intérêt à un utilisateur particulier. Voici quelques quelqu'un de code m'a aidé.

named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
  :conditions => {:users_interests => {:user_id => user}}
   }}

i exécuté à partir du contrôleur =>

@user = User.find(1) 
@events = Event.shares_interest_with_user(@user)

Je reçois l'erreur:

uninitialized constant Event::EventsInterest

Quelqu'un peut-il voir ce que je foiré?

Était-ce utile?

La solution

Vous devez avoir quelque chose de mal nommé le long du chemin. En bref, je dirais que vous avez un fichier ou une classe nommée de manière incorrecte. Rappelez-vous les noms de modèle MUST toujours être singulier, à la fois dans les noms de fichiers et de classe ou bien Rails ne fera pas la connexion. Une autre source de votre problème est que les arguments à belongs_to doivent aussi être singulier. Même si vous aviez obtenu les choses, la relation HABTM des intérêts avec les utilisateurs aurait jeté une erreur lors de l'exécution de la portée du nom.

Je suis en mesure de résoudre votre erreur avec les modèles suivants.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top