約定優於配置是Rails三大哲學之一。Rails中充滿了很多約定,本頁面對遇到的約定做一個總結。

單複數的約定:

Model用單數因為它表示一個對像如User, Database用複數因為它存放的是對象的集合, Controller用複數因為它是對對象集合的操作。

Routes.rb中定義session一般用resource :session,而不是普通的resources :sessions。因為一般只會操作當前用戶的session,不會操作所有session,所以不能定義為複數。 即如果一個請求一個資源時不需要指定ID,就在routes中用單數,如/profile顯示當前登錄用戶的信息,這樣你可以使用單數的/profile而不是/profile/:id。 也可以用match “profile” => “users#show”

變量名的單複數和大小寫問題:

首字母大小寫是無關緊要的, 最終產生的結果是一致的. model一般都用單數, 複數的model會有歧義, 比如當你創建model的一個實例的時候, 會覺得你在創建多個實例 其它很多地方用複數形式, 比如數據表的名字, 比如routes中的url形式以及url的名稱等等. 既然很多地方都用複數, 那麼不如統一用複數形式. 另外經過檢驗, 統一用單數的方式有點行不通, 到restful routes那塊跟Rails現有的設計有衝突. 那麼索性就統一用複數形式好了.

最終的解決方案: 大小寫問題已經沒有爭議了, 都用小寫即可 單複數問題: model名字用單數, 其它場合都用複數

文件名的單複數問題:

經過觀察, rails所有的常見的文件名都是小寫的. 所以大小寫的問題沒有爭議, 都用小寫即可. 但是單複數問題不太統一, 比如users_contoller.rb, model/user_spec.rb. 這邊總結的規律是: Model: 單數居多. 比如model文件, model_spec文件等等 Controller: 複數居多. 比如users_contoller文件, request/users_spec文件等等. View: 複數居多,因為view的文件的創建是在創建contoller的時候自動創建的, 所以它跟contoller基本上是一致的.比如javascripts/users.js.coffee 其它: 單複數都可以.

其它:

Controller中可以用變量request,然後可以得到session, request_info, head, method等請求信息 .與#使用慣例:在閱讀書時經常會遇到User.all, users#show這樣的表示,其中的點. 與井號#使用也是有約定的,點.用於調用類方法,井號#用於調用實例方法。

原文網址: http://dearjohn.iteye.com/blog/1625078