1

文到推文没什么大不了的。而且我认为Country会成为没有任何大惊小怪的国家。我什至将仙人掌变成仙人掌归功于他们(如果我错了,请纠正我)。

但是如果我有类Barnabus怎么办?我是否称它为餐桌 barnabuss、barnabi 或 barnabusses?zxzzy呢?非英语单词如何处理?是否有任何非混乱的选项可以覆盖资本化和多元化?

我是 Rails 的新手,修改后的表名让我有点反感。相关文档的链接表示赞赏。这是我见过的唯一与此相关的文档,它对理解表名的奇怪异常没有帮助。

如果这已经涵盖,请原谅我,我得到的结果并不完全是我想要弄清楚的。

4

3 回答 3

6

String#pluralize使用具有相当简单的英语通用规则的启发式方法作为基础,并添加一些已知的常见例外。

使用ActiveSupport::Inflector您可以自定义其行为。在 Rails 项目中,您可以在config/initializers/inflections.rb.

如果您想创建一个Barnabus具有相应barnabi表的模型,那么您所要做的就是取消注释一些 inflections.rb 内容并明确告诉 Rails 如何处理这个词。

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'barnabus', 'barnabi'
end

PS 感谢Holger 只是为了编辑。

于 2013-02-05T22:21:09.787 回答
1

在大多数情况下,您可以信任它,但如果您有一些可疑的模型名称和笨拙的复数名称,您始终可以在 Model.xml 中指定表名。例如

class SomeName < ActiveRecord::Base
  self.table_name = 'any_name'
end
于 2013-02-05T22:22:21.180 回答
0

如果您担心视图/错误消息中的复数化,那么在 Rails 无法将复杂的表名复数化的情况下,您可以向您的应用程序添加一些本地化,并告诉它您希望它在各种上下文中使用什么。请参阅http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models

这是一个实际的复数规则示例:

activerecord:
    models:
      barnabus:
        zero: Barnabi
        one: Barnabus
        few: Barnabi
        other: Barnabi
于 2013-02-05T22:28:09.240 回答