rails中处理复数单词的pluralize方法

本文介绍了Rails框架中处理英语单词单复数形式的方法。通过使用ActionView中的pluralize方法,可以根据数量动态调整单词形式。文章还深入探讨了pluralize方法的工作原理,并展示了如何通过配置文件自定义规则。
摘要由CSDN通过智能技术生成

 

原帖

 

缘由

 

在日常开发中,有时候会碰到要将一些单词按照它的数量来按单复数显示

 

所幸rails已经考虑到了这一点,在ActionView中有一个方法

 

 

There are <%= pluralize @user.size, "user" %>.  

 

 

例子

 

 pluralize(1, 'person') 
 # => 1
 person  pluralize(2, 'person') 
 # => 2 people  
 pluralize(3, 'person', 'users') 
 # => 3 users  
 pluralize(0, 'person') 
 # => 0 people 

 

 

深入研究pluralize方法:

 

   def pluralize(count, singular, plural = nil)

  "#{count || 0} " + ((count == 1 || count =~ /^1(\.0+)?$/) ? singular : (plural || singular.pluralize))
end 
 

可以看到英语单词的单复数是由String#pluralize方法提供,这个是由ActiveSupport::Inflector提供的一个扩展方法

在rails console里运行

 

 

"post".pluralize 
# => "posts" 
"octopus".pluralize 
# => "octopi"
"sheep".pluralize 
# => "sheep" 
"words".pluralize 
# => "words" 
"CamelOctopus".pluralize 
# => "CamelOctopi" 

 

 

继续研究ActiveSupport::Inflector.pluralize

 

 

def pluralize(word) 
  result = word.to_s.dup  
  if word.empty? || inflections.uncountables.include?(result.downcase) 
    result
  else
     inflections.plurals.each { |(rule, replacement)| 
       break if result.gsub!(rule, replacement)
     }
     result
  end
end 

 可以看到单词的单复数的匹配设置是在inflection.pluarls里,那要如何修改呢? rails已经有一个配置文件了,

 

 在/paht/to/site/config/initializers/inflections.rb

 

 

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural /^(ox)$/i, '\1en' 
  inflect.singular /^(ox)en/i, '\1' 
  inflect.irregular 'person', 'people'
  inflect.uncountable %w( fish sheep ) 
end
 

plural和singual是匹配单复数的通用匹配规则,irregular是处理那些特殊单词变化,uncountbale就是那些单复数一样的单词

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值