我正在使用带有 Ransack 和 Kaminari 的 Rails 4,我有这条路线:
resources :domains do
resources :backlinks do
collection { post :search, to: 'backlinks#index' }
end
end
我发现 kaminari 分页会生成错误的链接,如下所示:
/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
我的问题是为什么这个甚至不是“获取”的额外收集路线(搜索)对 url 创建的影响那么大……这是“正常”吗?
我的第二个问题是如何摆脱问题并以某种方式告诉 Kaminari 生成正确的链接,即使我保留了那条额外的路线。