Dan*_*ght 10 ruby pagination ruby-on-rails-3 kaminari
如果Kaminari的URL生成链接返回第一页,则会忽略页面参数.但是,如果省略页面参数,则应用程序旨在选择随机页面.因此,Kaminari的默认行为会阻止以可靠的方式返回第一页.
我已经解决了这个问题,稍后会发布我的解决方案,但我想发布这个问题给后人,我也是Rails的新手,因此我不确定我的解决方案是最好的还是最好的优雅,我对改进和改进感兴趣,如果只是为了我自己的自私教育!
Dan*_*ght 14
实现我们想要改变的行为的Kaminari中的代码行在lib/kaminari/helpers/tags.rb该方法中Kaminari::Helpers::Tag::page_url_for.
def page_url_for(page)
@template.url_for @template.params.merge(@param_name => (page <= 1 ? nil : page))
end
Run Code Online (Sandbox Code Playgroud)
要覆盖此行为,我创建了一个文件lib/kaminari/helpers/tag.rb,其中包含以下内容:
module Kaminari
module Helpers
class Tag
def page_url_for(page)
@template.url_for @template.params.merge(@param_name => (page < 1 ? nil : page))
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后我通过添加以下行来修补文件config/initializers/extensions.rb:
require "lib/kaminari/helpers/tag.rb"
Run Code Online (Sandbox Code Playgroud)
我对Ruby/Rails术语的任何尴尬表示道歉,我对Ruby仍然相当新.欢迎提出意见和批评.
UPDATE
新版本的kaminari源将需要此作为更新的行:
@template.url_for @params.merge(@param_name => (page))
Run Code Online (Sandbox Code Playgroud)
否则你将失去通过你的分页电话的其他参数.
为了clairity缘故,这里是新代码的完整输出:
module Kaminari
module Helpers
class Tag
def page_url_for(page)
@template.url_for @params.merge(@param_name => (page))
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
如Daniel建议的那样,您仍然会将其置于初始化文件中.