动态感觉 静观其变

居住地:江西南昌,msn:xlp223(at)hotmail.com,gmail talk:myhat123(at)gmail.com, 欢迎交流。喜欢python,也喜欢rails框架。

逝者如斯
网志分类
· 所有网志
· python学习
· pylons学习
· erlang学习
· ruby学习
· linux
· dotnet
· java
· 其他动态语言
· 感想心得
· ice学习
· 生活琐事
· 其他小玩意
搜索本站
友情链接
· 我们的小歪
· 管理我的Blog
· limodou的学习记录
· ywl51
· 花钱的年华
· python资料
· hd的blog
· oneZ
· hgf
· devin's braindump
· pylons
· sqlalchemy
· michael
· xyb
· kjd
· eiffelqiu
· okpython中国

订阅 RSS

0179109

歪酷博客


« 上一篇: 深入rails(2) 下一篇: 深入rails(4) »
Hzg @ 2005-08-31 08:06

命名约定

命名在rails有着非常重要的意义。它通过命名机制减少了很多外在的配置,使得整个代码更加紧凑简洁。同时也给初学者带来了一些困惑。下面是一些rails默认的约定。

我们经常使用短语来命名变量和类。在ruby里通常约定变量的名字全是小字母,单词之间用下划线隔开。类和模块命名则不同,它们没有下划线,短语中每个单词的第一个字母以大写开头。(称为mixed-case,混合型)比如变量order_status,类LineItem。

Rails中采用了这种约定并以两种方式进行了扩展。第一,它假定数据库的表名和变量名一样,都是小写字母,单词之间是下划线。rails还假定表名通常是复数形式。比如表名orders,third_parties。另一方面rails假定文件都是以小写字母带下划线来命名。

rails为自动转换名字会使用这些命名约定的规则。例如,你的程序可能包含一个model类来处理细目(line items),你已经使用ruby的命名约定来定义这个类LineItem。为此,Rails将自动做出以下的规则:
1)对应的数据库表名被称为line_items。注意是小写字母,下划线,复数。
2)rails也将知道在一个叫line_item.rb(在app/models目录中)的文件中去寻找类LineItem的定义。

rails的控制器也有附加的命名约定。如果应用程序由一个store控制器,那么会发生以下一些情形:
1)rails假定类被称为StoreController,并且它是定义在app/controllers目录下store_controller.rb的文件中
2)假定有一个StoreHelper的helper模块,它是位于app/helpers目录下的store_helper.rb中。
3)负责输出的views和layout template包含在目录app/views/layouts/下的store.rhtml或者store.rxml中。

Model命名:
table      line_items
class       LineItem
file         app/models/line_item.rb

Controller命名:
url             http://.../store/list
class          StoreController
file            app/controllers/store_controller.rb
method      list()
layout        app/views/layout/store.rhtml

view命名:
url          http://.../store/list
file         app/views/store/list.rhtml(or .rxml)
helper     module StoreHelper
file         app/helpers/store_helper.rb

这里还有一个需要提醒的。在正常的ruby代码中引用以上那些文件中的class和module必须使用require来包括ruby的源文件。因为rails知道这些文件名,类名之间的关系。所以require在rails里是没有必要的。这样的好处是不言而喻的,你可以直接引用model类名,这个model将自动加载到程序中。

正如你所看到的,这种模式在你的类被存储到sessions中时会行不通。因此你必须要明确地声明。即使这样,你也不必使用require。相反,你的控制器只要包含一行,像这样:
class StoreController < ApplicationController
 model :line_item
 #...
注意这里的命名约定还是和前面是一致的。它将会把line_item.rb加载进来,这个文件包含类LineItem。


把Controllers归组到模块

到目前为止,我们所有的controllers都是在app/controllers目录中。有时加入更多的结构会更方便。例如:我们的store可能会用到很多的controller,它是要执行相关的管理上的功能。为了不影响到上层的名字空间,我们可能会把他们归组到一个单一的admin名字空间。

rails将会使用一个简单的约定来做这件事。如果一个进来的request有一个名字为admin/book的控制器,rails将到目录app/controllers/admin中找名为book_controller。也就是说,这个controller的名字的最后部分将被解析到一个名为name_controller.rb的文件,app/controller/之后的路径信息通常被作为子目录。


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定