2010-02-03 6 views
1

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)Utilisez ActiveRecord pour Trouver Résultat de 5 tableaux emboîtés

Ensuite, 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.

J'essaie d'utiliser ActiveRecord pour interroger une liste de tous les événements où l'interest.id de EventsInterests = interest.id de UsersInterests

J'utilise has_many et belongs_to relations avec le Nested Loop Plugin

Mes modèles ressemblent donc =>

user.rb

has_many :users_interests 
has_many :interests, :through => :users_interests 

event.rb

has_many :events_interests 
has_many :interests, :through => :events_interests 

interest.rb

belongs_to :users , :through => :users_interests 
belongs_to :events , :through => :events_interests 

users_interests.rb

belongs_to :users 
belongs_to :interests 

events_interests.rb

belongs_to :interests 
belongs_to :events 

Si le @ user = User.find (1), comment Je interroge les événements qu'un utilisateur serait intéressé?

Je suis venu avec ceci => @ events.find (: all,: conditions => EventsInterests.interest_id = UsersInterests.interest_id) ??

mais je reçois l'erreur

undefined method `interest_id' for UsersInterests(user_id: integer, interest_id: integer):Class 

umm..wtf? les gars d'aide .... J'ai été dans ce domaine depuis 4 jours comme

Répondre

1

D'abord, hop dans la console et assurez-vous que toutes vos relations au travail:

User.first.events 
User.first.interests 
Events.first.users 
Interests.first.users 
Interests.first.events 
# ... and so 

Juste pour clarifier les choses, une liste d'utilisateurs ses intérêts, et vous voulez obtenir une liste des événements correspondant à ces intérêts?

User.first.interests.collect { |interest| interest.events }.uniq 

Pas particulièrement efficace, mais efficace et facile à comprendre.

Vous pouvez utiliser User.first.interests_singular_ids pour obtenir les identifiants et transmettre cela à find() avec interest_id IN(...) cette liste aussi. Cependant, je ne suis pas sûr à quel point ce serait plus rapide.

Questions connexes