我正在编写一些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
答案 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'),您可以退回'审核'
希望有所帮助。