Encontrar registros de Ruby on Rails de la tabla de combinación 'has many through', ¿hay una manera más fácil?

Tengo una relación 'tiene muchos a través de' entre dos modelos:

Task:  
has_many :placements
has_many :games, :through => :placements

Game:
  has_many :placements
  has_many :tasks, :through => :placements

Placements:
  belongs_to :task
  belongs_to :game

En el método de índice de mi controlador, quiero enumerar solo aquellas tareas que tienen una identificación de juego en particular. La solución que se me ocurrió utiliza una serie de identificadores, pero estoy pensando que debe haber una forma más fácil, aunque menos obvia para mí, de hacer esto.

@tasks = Task.find(Placement.where(:game_id => current_user.selectedgame).collect(&:task_id))

Cualquier sugerencia más bienvenida por favor.

preguntado el 22 de mayo de 12 a las 10:05

2 Respuestas

Tal vez me estoy perdiendo algo en tu pregunta, pero...

@tasks = Game.find(current_user.selectedgame).tasks

Probablemente deberías usar has_and_belongs_to_many.

contestado el 22 de mayo de 12 a las 10:05

¡Muchas gracias! Estaba seguro de que había una manera más fácil. - user1409746

Gracias, uso hasmanythrough para poder tener campos adicionales en la combinación. - user1409746

Puedes empezar desde el Games :

Games.find(current_user.selectedgame).tasks

Puede usar el has_and_belongs_to_many relaciones en lugar de has_many :through, pero no es necesario. El Guía de Ruby on Rails sobre asociaciones de registros activos tiene una sección sobre esto.

contestado el 22 de mayo de 12 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.