2012-09-13 29 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