我有8个控制器使用will_paginate来分页他们的索引页面。我想覆盖每个“上一个”和“下一个”的默认值,而不必指定相同的选项8次。有没有办法只覆盖一次默认值(可能是通过子类化will_paginate)。
答案 0 :(得分:11)
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
。
答案 1 :(得分:2)
我假设你在控制器中做了类似的事情:
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
将使用您的默认设置,并且仍然允许您在必要时覆盖它们。