Ransackのsort_linkのURLクエリからパラメーターを除外する
🥽

Ransackのsort_linkのURLクエリからパラメーターを除外する

Created
May 10, 2022 09:36 AM
Tags
Ruby on Rails
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 に設定している。
def url_options @params.merge( @options.merge( @search.context.search_key => search_and_sort_params)) end
send(routing_proxy).url_for(options_for_url)