Ransack: How to sort by field from joined table?

Created on 15 Jul 2013  路  1Comment  路  Source: activerecord-hackery/ransack

Here is connection between Lesson and User written in lesson.rb:

has_many :user_lessons
has_many :users, through: :user_lessons

Here is code which I have in my controller:

@lessons_search = current_user.lessons.search(params[:q])
if @lessons_search.sorts.empty?
  @lessons_search.sorts = 'created_at desc'
end
@lessons = @lessons_search.result.page(params[:page])

Code generates this query. Query is ok.

SELECT "lessons".* FROM "lessons" INNER JOIN "user_lessons" ON "lessons"."id" = "user_lessons"."lesson_id" WHERE "user_lessons"."user_id" = 4 ORDER BY "lessons"."created_at" DESC LIMIT 24 OFFSET 0

I have task to change this functionality. New sorting must be made by user_lessons.created_at field. So I change code in my controller:

@lessons_search = current_user.lessons.search(params[:q])
if @lessons_search.sorts.empty?
  @lessons_search.sorts = 'user_lessons_created_at desc' # <-- this line is changed
end
@lessons = @lessons_search.result.page(params[:page])

And now this query is generated:

SELECT "lessons".* FROM "lessons" LEFT OUTER JOIN "user_lessons" "user_lessons_lessons" ON "user_lessons_lessons"."lesson_id" = "lessons"."id" INNER JOIN "user_lessons" ON "lessons"."id" = "user_lessons"."lesson_id" WHERE "user_lessons"."user_id" = 4 ORDER BY "user_lessons_lessons"."created_at" DESC LIMIT 24 OFFSET 0

With new code app is not working as supposed to work.
How sorting should be made when I want to sort by field from table which is joined to original model?

>All comments

Hi @sigmaray, please see the README which gives an example of searching through associations.

Was this page helpful?
0 / 5 - 0 ratings