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
  • 其它场合应该是单复数均可以.
相关文章
相关标签/搜索