Ruby on rails对模型,视图和控制器名称使用单数和复数约定。这非常好,因为可能有一个叫做user
的模型和一个叫做users
的控制器。这项工作几乎涉及到每一个词,如用户,树,书,所以每个词都有一个复数形式。智能复数总是智能?
但是,那些不仅仅需要s来形成复数的单词,比如以字母“y”结尾的单词呢?例如,城市和城市?栏杆是否知道差异,或者我是否需要编写city
和citys
,即使它在语法上是错误的?
Ruby on rails对模型,视图和控制器名称使用单数和复数约定。这非常好,因为可能有一个叫做user
的模型和一个叫做users
的控制器。这项工作几乎涉及到每一个词,如用户,树,书,所以每个词都有一个复数形式。智能复数总是智能?
但是,那些不仅仅需要s来形成复数的单词,比如以字母“y”结尾的单词呢?例如,城市和城市?栏杆是否知道差异,或者我是否需要编写city
和citys
,即使它在语法上是错误的?
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。
对于很多常见的,它知道如何处理它很好。您可以通过执行以下操作在IRB中自行尝试:
require 'active_support/all'
ActiveSupport::Inflector.pluralize("city")
然后您将返回一个字符串,其值为“cities”。您还可以按照config/initializers/inflections.rb
中列出的步骤添加和调整折曲,这很好地解释了它!谢谢! – weltschmerz