Ruby on Railsで、ransackのsort_link
ヘルパーを使うと、?q%5Bs%5D=name+asc
のようなURLのアンカーを作成してくれる。
この時、同時にkaminariでページネーションをしていると、sort_linkはparamsを自動的にマージするので、?page=2&q%5Bs%5D=name+asc
のようなURLになる。
sort_link :id, page: nil
のようにpageパラメータをnilで上書きしてあげると、作成されたURLのクエリにpageは設定されなくなる。
なお、sort_link :id, params: { page: nil }
では pageは上書きされない。sort_link :id, params: { page: 1 }
と書くとURLのクエリにpageが2つ設定される。
ransackのソースコードを見ると、paramsとsort_linkに指定したオプションをマージして直接 url_for
に設定している。
https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/helpers/form_helper.rb#L131
def url_options
@params.merge(
@options.merge(
@search.context.search_key => search_and_sort_params))
end
https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/helpers/form_helper.rb#L92
send(routing_proxy).url_for(options_for_url)