Rails 中某些复合词的复数化规则

Pluralization rule for some compound terms in Rails

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

这些术语是一些复合词,我可以将第一个单词而不是第二个单词复数,但就我而言,我无法选择仅对第一个单词应用复数功能。例如:

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

我试过像这样的正则表达式 /\sof\s/ 来找到字符串中的 of 部分,但无法编写正确的词形变化规则。

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

Obs:我不是在寻找语言解决方法,例如 'knowledge base'。这个例子只是说明性的。

试试这个:

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

  2. 的文件
  3. 简单的非动态示例:

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

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

编辑:

如果您只想要一种方法来处理所有这些类型的更改。您可以定义一个 irregular_pluralize 方法,它接受与 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

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

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

然后我得到:

'base of knowledge'.pluralize -> 'bases of knowledge'

符合预期