El uso de ActiveRecord para encontrar Resultado de 5 tablas anidadas
-
25-09-2019 - |
Pregunta
Tengo un usuario Modelo (nombre,: contraseña,: e-mail), y el modelo de eventos (: nombre,: etc) y el modelo de interés (: nombre)
A continuación, he creado dos se unen tablas -> UsersInterests y EventsInterests; cada uno que no contenga una clave primaria y sólo compuesto por la user_id / interest_id y event_id / interest_id respectivamente.
Estoy tratando de usar ActiveRecord para consultar una lista de todos los eventos en los que el interest.id de EventsInterests = interest.id de UsersInterests
Estoy usando has_many y belongs_to relaciones con el bucle anidado Plugin
Mis modelos parecen tan =>
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 el usuario @ = User.find (1), ¿Cómo puedo consultar los eventos de un usuario estaría interesado?
Se me ocurrió esta => @ Events.find (: todos,: condiciones => EventsInterests.interest_id = UsersInterests.interest_id) ??
pero me sale el error
undefined method `interest_id' for UsersInterests(user_id: integer, interest_id: integer):Class
umm..wtf? cualquier ayuda chicos .... He estado en esto por como 4 días
Solución
En primer lugar, hop en la consola y asegúrese de que todo su trabajo de relaciones:
User.first.events
User.first.interests
Events.first.users
Interests.first.users
Interests.first.events
# ... and so
Solo para aclarar, a Listas de usuarios a sus intereses, y se desea obtener una lista de los eventos que coincidan con esos intereses?
User.first.interests.collect { |interest| interest.events }.uniq
No es particularmente eficiente, pero eficaz y fácil de comprender.
Se podría utilizar User.first.interests_singular_ids
para obtener los identificadores y pasar a un hallazgo que () con interest_id IN(...)
esa lista, también. No estoy seguro de cuánto más rápido que sería, sin embargo.