文档章节

Rails中的约定与命名规范

穿山
 穿山
发布于 2017/11/27 15:27
字数 890
阅读 28
收藏 0

约定优于配置是Rails三大哲学之一。Rails中充满了很多约定,本页面对遇到的约定做一个总结。

单复数的约定

Model用单数因为它表示一个对象如User,
数据库表用复数因为它存放的是对象的集合,
Controller用复数因为它是对对象集合的操作


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这样的表示,其中的点.与井号#使用也是有约定的,点.用于调用类方法,井号#用于调用实例方法。

 

 

 

最重要的是要一致, 不要一会儿单数, 一会儿复数; 一会儿首字母小写, 一会儿首字母大写. 如果不能做到完全一致, 至少努力做大大部分情况下一致.

 

 

变量名的单复数和大小写问题

 

考虑下面三条命令:

  • 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种, 在阅读的时候给我造成了很大的困惑. 我想, 到底什么才是最为推荐的? 如果不按照教程上面的例子做会不会有什么问题?

 

实验的结论:

  • 首字母大小写是无关紧要的, 最终产生的结果是一致的.
  • 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
  • 其它场合应该是单复数都可以.

本文转载自:http://dearjohn.iteye.com/blog/1625078

上一篇: Java多线程总结
下一篇: Ruby 多线程
穿山
粉丝 9
博文 33
码字总数 18655
作品 0
南京
私信 提问
RSPEC::RAILS介绍(翻译)

想有一下RSPec来做BDD开发,地发现中文资料太少了,无耐只能自己去主页上看资料,做为爱国者,俺的英文真烂得不成,不过翻完了,发出来大家乐一乐吧。 Spec::rails ------------------------...

阿昭
2010/12/01
2K
3
展示一下自己的 Rails 小作品

使用ruby也有几年了,但一点都不敢说自己掌握这门语言。 ruby的编程方法和技巧实在很多,相信这里都是和我一样发自内心喜欢这门语言的朋友,就不叨叨ruby具体有多好了,哈哈。 Rails呢,现在...

Chorder
2018/02/07
0
0
Beangle 2.3.0 发布

Beangle 2.3.0 提供了2.1.0 以来的新变化,主要有: Beangle-model 模块中支持注解方式按约定命名实体,可根据包指定表前缀和schema(类似rails的命名方式) 支持相同实体名(entityName)的重复...

段体华
2011/05/15
581
0
Nutz的快速开发版本--Nutz on Rails

#Nutz# 为了提高开发效率做了很大的努力也非常成功。Nutz on Rails 只是站在巨人的肩膀上做点小小的工作。 Nutz on Rails 规定了项目的一些开发规范,添加了COC特性(主要是为Nutz添加了一些默...

tiantian_orz
2012/04/09
2.7K
4
Effective Java 第三版——68. 遵守普遍接受的命名约定

Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所以JDK 最好下载 JDK 9以上的版本。 遵守普遍接受的命...

M104
03/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

STM32进阶之串口环形缓冲区实现

队列的概念 在此之前,我们来回顾一下队列的基本概念: 队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。 队列...

杰杰1号
25分钟前
10
0
设计模式-建造者模式

建造者模式 定义 将一个复杂对象的构建和它的表示分离,使得同样的构建过程创建出不同的表示。这句话理解起来优点抽象,我们打个简单的比方吧,中国人都喜欢做菜,做菜的时候后会放很多配料...

木本本
28分钟前
9
0
017、xml版本代码生成器配置

1、在pom.xml文件中增加mybatis-generator-maven-plugin插件 <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>......

北岩
40分钟前
7
0
用jQuery-Easy-UI编写注册页面

本文转载于:专业的前端网站➮用jQuery-Easy-UI编写注册页面 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content=......

前端老手
49分钟前
6
0
Git ssh配置

生成密钥对 ssh-keygen -t rsa -C "email@email.com"邮箱替换自己邮箱在地址C:\Users\账户\.ssh下,id_rsa、id_rsa.pub两个文件复制文件id_rsa.pub内容到github\gitlab的Settings-> SSH ......

JUKE
56分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部