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?
Hi @sigmaray, please see the README which gives an example of searching through associations.