2012-04-26 14 views
11

Digamos que tengo dos modelos: Curso y Curso programado.Rails 3. ordenar por modelo asociado

El modelo del curso tiene un atributo de nombre.

curso has_many: programado cursos scheduled_courses: belongs_to curso

courses 
id | name 
1 | biology 
2 | history 
3 | chemistry 
4 | literature 

scheduled_courses 
id | course_id 
1 | 2 
2 | 4 
3 | 1 
4 | 2 

¿Cómo puedo hacer una consulta ActiveRecord para ordenar los cursos programados alfabéticamente?

+2

Pruebe este: http://stackoverflow.com/questions/1530131/rails-order-using-a-has-many-belongs-to-relationship – luacassus

+0

Debería publicar lo que ha intentado ... – EricM

Respuesta

18

Trate ...

ScheduledCourse.joins(:course).order('course.name') 

Si esto no funciona, puede que tenga que llamar a .all antes de que su condición se une, así:

ScheduledCourse.all.joins(:course).order('course.name') 

Como luacassus dijo, this answer can help ; Creo que la sintaxis en esa respuesta es pre-Arel (ActiveRecord 3), pero hará el trabajo. ¡Espero que ayude!

EDIT:

Como se ha mencionado por @FellowStranger, la sintaxis correcta en la actualidad parece ser

ScheduledCourse.joins(:course).order('courses.name') 
11
ScheduledCourse.joins(:course).order('courses.name asc') 

Tenga en cuenta que el nombre de tabla debe estar en plural. Este código está probado.

+1

Esta respuesta es más correcto, ya sea que se debe seleccionar como la respuesta aceptada o la respuesta que Ben Kreeger dio a las necesidades de edición. – RickyD

Cuestiones relacionadas