Rails中的約定與命名規範

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

單複數的約定

Model用單數由於它表示一個對象如User,
數據庫表用複數由於它存放的是對象的集合,
Controller用複數由於它是對對象集合的操做java


Routes.rb中定義session通常用resource :session,而不是普通的resources :sessions。由於通常只會操做當前用戶的session,不會操做全部session,因此不能定義爲複數。
即若是一個請求一個資源時不須要指定ID,就在routes中用單數,如/profile顯示當前登陸用戶的信息,這樣你可使用單數的/profile而不是/profile/:id。
也能夠用match 「profile」 => 「users#show」數據庫

其它

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

 

 

 

最重要的是要一致, 不要一下子單數, 一下子複數; 一下子首字母小寫, 一下子首字母大寫. 若是不能作到徹底一致, 至少努力作大大部分狀況下一致.session

 

 

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

 

考慮下面三條命令:spa

  • rails generate model user name:string
  • rails generate controller user --no-test-framework
  • rails generate integration_test user

其中比較容我困惑的是user這個單詞, 出如今不一樣的場合可能有下面四種狀況:設計

  • user
  • users
  • User
  • Users

上面的狀況在railstutorial這本教程裏面出現了至少3種, 在閱讀的時候給我形成了很大的困惑. 我想, 到底什麼纔是最爲推薦的? 若是不按照教程上面的例子作會不會有什麼問題?rest

 

實驗的結論:對象

  • 首字母大小寫是可有可無的, 最終產生的結果是一致的.
  • 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
  • 其它場合應該是單複數均可以.
相關文章
相關標籤/搜索