ransack の sort_link メソッドから Javascript を実行する
2015-05-30
sort_link
メソッドに、JavaScript のファイルを渡しても、コードが pre
要素で表示されるだけで、スクリプトとして実行されない問題に出くわしました。じゃあ、sort_link
メソッドの実装を見てみよう、ということで、コードがこちらです。
# +sort_link+
#
# <%= sort_link(@q, :name, [:name, 'kind ASC'], 'Player Name') %>
#
def sort_link(search_object, attribute, *args)
search, routing_proxy = extract_search_and_routing_proxy(search_object)
unless Search === search
raise TypeError, 'First argument must be a Ransack::Search!'
end
s = SortLink.new(search, attribute, args, params)
link_to(s.name, url(routing_proxy, s.url_options), s.html_options(args))
end
これ、最終的に link_to メソッドをコールしているだけなんですね。そのため、JavaScript として実行させるためには、”remort: true (Ajaxでリンクを処理)” のオプションを、渡してやる必要があります。このオプションは、sort_link メソッドの第4引数で与えることができます。
sort_link(@q, :name, {}, remote: true)