【问题标题】:How best to DRY will_paginate options如何最好地干燥 will_paginate 选项
【发布时间】:2011-10-27 18:38:52
【问题描述】:

我有 8 个控制器使用 will_paginate 对其索引页进行分页。我想覆盖每个“上一个”和“下一个”的默认值,而不必指定相同的选项 8 次。有没有办法只覆盖一次默认值(也许通过继承 will_paginate)。

【问题讨论】:

    标签: ruby-on-rails will-paginate


    【解决方案1】:

    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

    【讨论】:

    • 那么我们可以考虑回答这个问题吗?
    • @mislav 这是有道理的,但是当我尝试它(两个 yml 文件)时,它不起作用。我使用的是 3.0.pre2 版本 - 这可能是为什么?
    • 为了确定,您使用英语作为默认的 Rails 语言环境(我相信它是默认的默认语言环境 :-p )?我已经更新了我的答案,包括为什么如果你不这样做它可能不起作用。
    • @jack:那个版本太旧了。请使用 3.0.0 或更高版本
    【解决方案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 的批准:)。我完全忘记了翻译文件选项。我的解决方案在一般情况下可能很有用,当帮助程序无法以类似方式配置时。

    【讨论】:

    • 谢谢 Andrew,不过,如果您希望网站上使用多个“默认”分页样式,您的方法会很好,
    • 如果您想根据任何其他动态标准更改选项,这种简单的包装方法很有用。例如,如果您想为移动设备提供不同的分页选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2013-09-16
    • 2014-05-08
    • 1970-01-01
    相关资源
    最近更新 更多