Ransack と Kaminari で Rails 4 を使用しています。次のルートがあります。
resources :domains do
resources :backlinks do
collection { post :search, to: 'backlinks#index' }
end
end
カミナリのページネーションが次のような間違ったリンクを生成することを発見しました。
/domains/16/backlinks/search?page=2
それ以外の
/domains/16/backlinks?page=2
Kaminari gem のソース コードを調べたところ、単純にパラメーター付きの url_for ヘルパーを使用していることがわかりました。
class Tag
def initialize(template, options = {}) #:nodoc:
@template, @options = template, options.dup
@params = @options[:params] ? template.params.merge(@options.delete :params) : template.params
end
...
def page_url_for(page)
@template.url_for @params.merge(@param_name => (page <= 1 ? nil : page))
end
end
次に、この単純なコードを私の見解でテストしました。
= url_for params
(パラメーターは {"action"=>"index", "controller"=>"backlinks", "domain_id"=>"16"} です)
はい、生成されました
/domains/16/backlinks/search
私の質問は、「get」でさえないこの余分な収集ルート (検索) が、URL の作成にそれほど影響を与えるのはなぜですか... これは「正常」ですか?
2 番目の質問は、どうすればこの問題から抜け出し、余分なルートを維持したとしても正しいリンクを生成するように Kaminari に指示する方法です。