如何最好地DRY will_paginate选项

时间:2011-08-16 05:02:16

标签: ruby-on-rails will-paginate

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

2 个答案:

答案 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.ymlconfig/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将使用您的默认设置,并且仍然允许您在必要时覆盖它们。

编辑:在这种情况下,suweller的回应绝对是更好的方式,特别是考虑到它被插件创建者mislav批准了:)。我完全忘记了翻译文件选项。我的解决方案可能在一般情况下很有用,因为帮助器不能以类似的方式配置。