如何最好地DRY will_paginate选项

我有8个控制器使用will_paginate来分页他们的索引页面。 我想覆盖每个“上一个”和“下一个”的默认值,而不必指定相同的选项8次。 有没有办法只覆盖一次默认值(可能是通过子类化will_paginate)。

will_paginate使用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.ymlconfig/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批准:)。 我完全忘记了翻译文件选项。 我的解决方案可能在一般情况下很有用,因为帮助程序不能以类似的方式配置。