【发布时间】:2011-10-27 18:38:52
【问题描述】:
我有 8 个控制器使用 will_paginate 对其索引页进行分页。我想覆盖每个“上一个”和“下一个”的默认值,而不必指定相同的选项 8 次。有没有办法只覆盖一次默认值(也许通过继承 will_paginate)。
【问题讨论】:
标签: ruby-on-rails will-paginate
我有 8 个控制器使用 will_paginate 对其索引页进行分页。我想覆盖每个“上一个”和“下一个”的默认值,而不必指定相同的选项 8 次。有没有办法只覆盖一次默认值(也许通过继承 will_paginate)。
【问题讨论】:
标签: ruby-on-rails will-paginate
will_paginate uses I18n 所以你可以使用它。
假设您使用英语作为默认语言环境,application.rb 中应出现以下行:
config.i18n.default_locale = :en
然后您可以通过将以下内容添加到config/locales/will_paginate.en.yml 来更改分页链接的文本:
en:
will_paginate:
previous_label: "← go back"
next_label: "go forward →"
您也可以将它们添加到您的默认翻译文件中:config/locales/en.yml
但我发现它很快就会变得太大而无法处理。
注意:如果您使用其他语言环境,例如 es,要使其正常工作,您至少需要将 YAML 文件中的 en: 键替换为 es: 并简明扼要地命名您的文件,
使用config/locales/will_paginate.es.yml 或config/locales/es.yml。
【讨论】:
我假设你在你的控制器中做这样的事情:
will_paginate @collection, :previous_label => '< go back', :next_label => 'go forward >'
你的问题是你想在你的应用程序中到处使用这些标签,所以重复它们是没有意义的。在这种情况下,您可以像这样定义一个助手:
def paginate(collection, options = {})
defaults = {
:previous_label => '< go back',
:next_label => 'go forward >',
}
options = defaults.merge(options)
will_paginate collection, options
end
之后,在您的视图中调用 paginate @collection 将使用您的默认值,但仍允许您在必要时覆盖它们。
编辑:在这种情况下,suweller 的回应绝对是更好的选择,尤其是考虑到它已获得插件创建者 mislav 的批准:)。我完全忘记了翻译文件选项。我的解决方案在一般情况下可能很有用,当帮助程序无法以类似方式配置时。
【讨论】: