2

我想为某些未正确复数的术语创建复数规则。我会把它放在我的inflections.rb文件中。

这些术语是一些复合术语,我可以将第一个单词而不是第二个单词复数,但是,就我而言,我没有选择仅在第一个术语上应用复数函数。例如:

'base of knowledge'.pluralize应该返回'bases of knowledge'而不是'base of knowledges'

我尝试了一个像这样的正则表达式/\sof\s/来查找 of 字符串上的部分,但无法编写规则来正确变形。

inflect.plural(???, ???)

Obs:我不是在寻找语言上的解决方法,比如'knowledge base'。该示例仅是说明性的。

4

2 回答 2

2

尝试这个:

  1. 创建一个名为:config/initializers/inflections.rb

  2. 简单的非动态示例:

    ActiveSupport::Inflector.inflections do |inflect|
      inflect.irregular 'base of knowledge', 'bases of knowledge'
    end
    

    这只需要您指定每个不规则复数短语而不是一个单词。只要你调用复数方法,它就会找到它。

编辑:

如果您只想要一种方法来处理所有这些类型的更改。您可以定义一个irregular_pluralize接受与复数相同的输入或接受 3 个对象的方法。

def irregular_pluralize(count, string)
  if count > 1
    split_string = string.split(" ")
    size = split_string.size
    first = split_string.first
    first.pluralize + " " + split_string.last(size - 1).join(" ")
  else
    string
  end
end
于 2015-01-09T18:40:53.983 回答
1

我找到了一种通过添加以下规则来改变复合词的方法:

inflect.plural(/(^\w+)\s(of\s\w+)/i, '\1s \2')

然后我得到:

'知识基础'.pluralize -> '知识基础'

正如预期的那样

于 2015-01-12T12:30:39.387 回答