Ruby NOT Rails中是否有复数函数?

时间:2010-03-15 09:46:02

标签: ruby require pluralize

我正在编写一些Ruby代码,而不是Rails,我需要处理这样的事情:

found 1 match
found 2 matches

我安装了Rails所以也许我可以在脚本的顶部添加一个require子句,但有没有人知道一个多元化字符串的RUBY方法?如果脚本不是Rails但我安装了Rails,是否有一个我可以要求的类可以解决这个问题?

编辑:所有这些答案都很接近,但我检查了让它为我工作的那个。 在编写Ruby时尝试使用此方法作为帮助程序,而不是Rails代码:

def pluralize(number, text)
  return text.pluralize if number != 1
  text
end

7 个答案:

答案 0 :(得分:70)

实际上你需要做的就是

require 'active_support/inflector'

,这将扩展String类型。

然后你可以做

"MyString".pluralize

将返回

"MyStrings"

for 2.3.5尝试:

require 'rubygems'
require 'active_support/inflector'

应该得到它,如果没有尝试

sudo gem install activesupport

然后是要求。

答案 1 :(得分:55)

在大多数情况下,Inflector太过分了。

def x(n, singular, plural=nil)
    if n == 1
        "1 #{singular}"
    elsif plural
        "#{n} #{plural}"
    else
        "#{n} #{singular}s"
    end
end

将它放在common.rb中,或者您喜欢的一般实用功能和...

require "common" 

puts x(0, 'result') # 0 results
puts x(1, 'result') # 1 result
puts x(2, 'result') # 2 results

puts x(0, 'match', 'matches') # 0 matches
puts x(1, 'match', 'matches') # 1 match 
puts x(2, 'match', 'matches') # 2 matches 

答案 2 :(得分:11)

我个人喜欢linguistics gem,这绝对不是与轨道相关的。

# from it's frontpage
require 'linguistics'

Linguistics.use :en

"box".en.plural #=> "boxes"
"mouse".en.plural #=> "mice"
# etc

答案 3 :(得分:2)

这对我有用(使用ruby 2.1.1和actionpack 3.2.17):

~$ irb
>> require 'action_view'
=> true
>> include ActionView::Helpers::TextHelper
=> Object
>> pluralize(1, 'cat')
=> "1 cat"
>> pluralize(2, 'cat')
=> "2 cats"

答案 4 :(得分:1)

require 'active_support'
require 'active_support/inflector'

inf = ActiveSupport::Inflector::Inflections.new

获取变形器,不确定如何使用它

答案 5 :(得分:0)

我为此定义了一个辅助函数,我将它用于每个用户可编辑模型的索引视图:

  def ovyka_counter(array, name=nil, plural=nil)
    name ||= array.first.class.human_name.downcase
    pluralize(array.count, name, plural)
  end

然后你可以从视图中调用它:

<% ovyka_counter @posts %>

对于国际化(i18n),您可以将其添加到您的语言环境YAML文件中:

  activerecord:
    models:
      post: "Conversation"

答案 6 :(得分:0)

我的解决方案:

# Custom pluralize - will return text without the number as the default pluralize.
def cpluralize(number, text)
  return text.pluralize if number != 1 
  return text.singularize if number == 1
end

因此,如果您致电cpluralize(1,'review'),您可以退回'审核'

希望有所帮助。