Utilisez ActiveRecord trouver Résultat 5 tableaux emboîtés
-
25-09-2019 - |
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)
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.
Je suis en train 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 boucle Plugin Nested
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 l'utilisateur @ = User.find (1), comment pourrais-je interroger les événements seraient intéressés un utilisateur?
Je suis venu avec cette => @ 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 comme 4 jours
La solution
Tout 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, une liste utilisateur ses intérêts, et que 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 cartes d'identité et passer à une découverte que () avec interest_id IN(...)
cette liste, aussi. Je ne sais pas combien il serait plus rapide, cependant.