10

Ruby on rails 对模型、视图和控制器名称使用单数和复数约定。这非常好,因为可能有一个名为的模型user和一个名为 的控制器users。这几乎适用于每个单词,例如 user(s)、tree(s)、book(s),因此每个只有 s 的单词构成复数形式。

但是,那些不需要 s 来构成复数形式的单词,例如以字母“y”结尾的单词呢?例如,城市和城市?rails 知道区别还是我需要写cityand citys,即使它在语法上是错误的?

4

2 回答 2

18

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的文档,了解更多关于如何教 Rails 新的变形。

于 2012-09-13T19:54:02.923 回答
1

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

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

你会得到一个值为“城市”的字符串。您还可以按照中列出的步骤添加和调整变形config/initializers/inflections.rb

于 2012-09-13T19:56:11.437 回答