5

WillPaginate有一个page_entries_info视图助手来输出文本,例如“显示总共 4825 份合同中的 1 - 35 份”。

但是,我发现当我尝试像这样使用它时......

= page_entries_info @contracts

它输出...

共显示 4825 份合约 1 - 35

(它输出模型的单数名称,而不是复数形式,全部小写。)

我需要给它一些其他参数吗?

我试过page_entries_info @contracts, :model => Contract但得到了同样的结果。

我使用的是 3.0.3 版本——当前版本。

顺便说一句,有人可以指点我 WillPaginate 的 API 文档吗?

4

1 回答 1

4

will_paginate API 文档: https ://github.com/mislav/will_paginate/wiki/API-documentation

简短的回答

您可以将模型选项指定为字符串,该字符串将正确复数。

page_entries_info @contracts, :model => 'contract'
# Displaying contracts 1 - 35 of 4825 in total

更长的答案

will_paginate 文档建议您使用i18n机制来自定义输出。这是一种痛苦,因为 AFAICT 您必须为config/locales/*.yml文件中的所有模型(例如,en.yml)写出单数和复数形式,并且%{foo}-style 语法似乎不是 ERB,而只是占位符,所以你不能做类似的事情%{foo.downcase}

如果您编写自己的助手,则可以完全控制输出。例如:

def my_page_info(collection)
  model_class = collection.first.class
  if model_class.respond_to? :model_name
    model = model_class.model_name.human.downcase
    models = model.pluralize
    if collection.total_entries == 0
      "No #{models} found."
    elsif collection.total_entries == 1
      "Found one #{model}."
    elsif collection.total_pages == 1
      "Displaying all #{collection.total_entries} #{models}"
    else
      "Displaying #{models} #{collection.offset + 1} " +
      "to #{collection.offset + collection.length} " +
      "of #{number_with_delimiter collection.total_entries} in total"
    end
  end
end

# Displaying contracts 1 - 35 of 4,825 in total
于 2014-05-12T13:41:11.707 回答