2012-09-13 58 views
9

Ruby on rails对模型,视图和控制器名称使用单数和复数约定。这非常好,因为可能有一个叫做user的模型和一个叫做users的控制器。这项工作几乎涉及到每一个词,如用户,树,书,所以每个词都有一个复数形式。智能复数总是智能?

但是,那些不仅仅需要s来形成复数的单词,比如以字母“y”结尾的单词呢?例如,城市和城市?栏杆是否知道差异,或者我是否需要编写citycitys,即使它在语法上是错误的?

回答

17

Rails知道很多复数。它可以处理“城市”,例如:

1.9.2p318 :001 > "city".pluralize 
=> "cities" 
1.9.2p318 :002 > "cities".singular 
=> "city" 

但是,您可能会发现它不知道的复数,并且不会学习。查看文档ActiveSupport::Inflector

Rails的核心团队已经声明了语调库 补丁不会为了避免破坏原有应用程序 可以依靠错误的语调被接受。如果您发现 不正确的变形并需要它为您的应用程序,您将需要 来自己纠正它(下面解释)。

你如何自己纠正它?在config/initializers/inflections.rb。例如:

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.plural /^(.*)(l)ens$/i, '\1\2enses' 
end 

更多关于如何教轨新拐点再次看到该文档为ActiveSupport::Inflector

+0

中列出的步骤添加和调整折曲,这很好地解释了它!谢谢! – weltschmerz

1

对于很多常见的,它知道如何处理它很好。您可以通过执行以下操作在IRB中自行尝试:

require 'active_support/all' 
ActiveSupport::Inflector.pluralize("city") 

然后您将返回一个字符串,其值为“cities”。您还可以按照config/initializers/inflections.rb