Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set defaults for ransack sorting?

To put simply enough, I'd just like to know if there's a way to set defaults for the sorting functionality using the Ransack gem? ie.

Currently, I have the following when the page loads:

empty_ransack

But instead, I'd like to have the following defaults when the page loads:

ransack with defaults

Is it possible to do this via proper configuration of the Ransack Gem?

Thanks in advance as always!

Best Regards!

like image 503
jlstr Avatar asked Nov 13 '12 22:11

jlstr


2 Answers

This works for me:

@search = Change.search(params[:q])
@search.sorts = 'updated_at desc' if @search.sorts.empty?

Note: I had some head scratching at first, when I had desc in uppercase – that just doesn't work.

like image 137
Christopher Creutzig Avatar answered Oct 07 '22 17:10

Christopher Creutzig


You can also set multiple default sorts by defining an array:

@search = Post.ransack(params[:q])  
@search.sorts = ['name asc', 'created_at desc'] if @search.sorts.empty?
@posts = @search.result.paginate(page: params[:page], per_page: 20)

https://github.com/activerecord-hackery/ransack/wiki/Sorting-in-the-Controller

like image 24
ToniTornado Avatar answered Oct 07 '22 15:10

ToniTornado