Ruby on rails Rails中某些复合术语的复数化规则

Ruby on rails Rails中某些复合术语的复数化规则,ruby-on-rails,regex,ruby-on-rails-4,inflection,Ruby On Rails,Regex,Ruby On Rails 4,Inflection,我想为一些没有正确复数化的术语创建一个复数化规则。我将把它放在我的屈折变化.rb文件中 这些术语是一些复合词,我可以将第一个单词复数,而不是第二个单词,但是,在我的例子中,我没有选择权只对第一个术语应用复数功能。例如: “知识库”。pluralize应返回“知识库”而不是“知识库” 我尝试了这样一个regexp/\sof\s/来查找字符串中部分的,但无法编写正确的屈折规则 屈折复数(??,?) Obs:我不是在寻找语言上的变通方法,比如“知识库”。这个例子只是说明性的。试试这个: 创建一个名为:

我想为一些没有正确复数化的术语创建一个复数化规则。我将把它放在我的屈折变化.rb文件中

这些术语是一些复合词,我可以将第一个单词复数,而不是第二个单词,但是,在我的例子中,我没有选择权只对第一个术语应用复数功能。例如:

“知识库”。pluralize
应返回
“知识库”
而不是
“知识库”

我尝试了这样一个regexp
/\sof\s/
来查找字符串中
部分的
,但无法编写正确的屈折规则

屈折复数(??,?)

Obs:我不是在寻找语言上的变通方法,比如“知识库”。这个例子只是说明性的。

试试这个:

  • 创建一个名为:
    config/initializers/endocations.rb的文件

  • 简单的非动态示例:

    ActiveSupport::Inflector.inflections do |inflect|
      inflect.irregular 'base of knowledge', 'bases of knowledge'
    end
    
    这只需要指定每个不规则的复数短语,而不是一个单词。只要调用pluralize方法,它就会找到它

  • 编辑:

    如果您只需要一个方法来处理所有这些类型的更改。您可以定义一个
    不规则的\u 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
    

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

    屈折。复数(/(^\w+)\s(of\s\w+)/i,“\1s\2”)

    然后我得到:

    “知识基础”。多元化->“知识基础”


    正如所料

    我的应用程序上已经出现了一些不规则的变化,但对于这种情况,我需要一个一般规则。这个例子只是something of something规则的一个例子。我还翻译了我的问题,以使其更好,因为原文是类似的,但在葡萄牙语。无论如何,如果没有更好的广义方法,我会使用你的想法!thanksI刚刚创建了一个您可以使用的快速方法。我没有直接编辑pluralize,但是您可以用与代码中的pluralize相同的方式调用它。这将进入应用程序帮助程序。我认为您的方法可以是string.gsub(/(^\w+)\s/,“\\1s”)。我认为,用反向引用替换可能是答案。这只是需要以某种方式纳入多元化规则。我现在无法在我的代码上试用,但我会稍后再试。