2010-02-02 11 views
0

J'ai un modèle utilisateur (: nom,: mot de passe,: email), et le modèle d'événement (: nom,: etc) et modèle d'intérêt (: nom) Puis j'ai créé deux tables de jointure -> UsersInterests et EventsInterests; chacun ne contenant pas de clé primaire et composé uniquement de l'id_utilisateur/de l'intérêt et de l'id_événement/de l'intérêt respectivement. [>] Pluriel <imbriqué a beaucoup par le biais de plugin et portées

Mes modèles Utilisez le Nested Has Many Through 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 un code avec lequel quelqu'un m'a aidé.

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

Quand je lance 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é?

Répondre

1

Vous devez avoir nommé quelque chose de mal en cours de route. En un coup d'oeil, je dirais que vous avez un fichier ou une classe nommée incorrectement. Se souvenir des noms de modèles DOIT être toujours au singulier, à la fois dans les noms de fichiers et de classes, sinon Rails ne fera pas la connexion. Une autre source de votre problème est que les arguments à belongs_to doivent aussi être singuliers. Même si vous aviez raison, la relation HABTM avec les utilisateurs aurait généré une erreur lors de l'exécution de la portée nommée.

J'ai été 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_int erest.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