rubyonrails:Ruby on rails开发从头来(windows)( 3十 3)- 命名约定

  在刚开始学习Rails时候可能会困惑于Rails时怎样自动处理命名比如如何根据个名为PersonModel来到数据库中找到名为people这次我们就来看看Rails里命名约定   1.    混合大小写下划线复数

  我们经常使用简写命名变量在Ruby中约定为命名变量时全部字母都小写单词中间使用下划线分割类(Class)和Modules命名有区别不使用下划线单词简写和首字母使用大写所以我们在前面编写代码里有order_status和LineItem这样类名

  Rails使用这样命名约定并且作了扩展首先假定数据库中表名和变量命名采用全小写字母并且单词中间使用下划线分割并且表明都是复数形式例如:ordersthird_parties同时Rails假定文件命名也使用小写和下划线

  Rails根据这些约定自动进行名字转换例如里或许包含个Model类来操作line item你可以使用Rails命名约定把这个类命名为LineItem根据这个名字Rails会作下面推断:

  l     数据库里表名为line_items

  l     在app/models目录下有个line_item.rb文件

  Rails控制器(Controller)命名有另外约定如果你里有个storeControllerRails会作下面推断:

  l     有个类叫做StoreController并且在app/controllers目录下有个store_controller.rb文件

  l     在app/helpers目录中个文件叫做store_helpers里面类名叫做StoreHelper

  l     在控制器对应目录app/views/store来查找视图模板

  l     获得视图输出并且把他们转换到app/views/layouts目录下store.rhtml或者store.rxml布局模板中

  通常在ruby代码中我们使用require关键字来将些文件中类引入到当前代码中Rails知道文件名和类名的间关系所以require关键字在Rails中不是必须在你引用个不知道名字类或者module时候Rails将根据命名约定将类名转换成文件名并且加载这个文件效果就象你通过名字引用个model然后这个model自动被加载到  

  就象你所看到这个模式在类被存储到session中时被打破了在这种情况下我们要明确声明他们例如我们在控制器(controller)里:

   StoreController < ApplicationController

  model :line_item

  在这里命名规约还在使用标记:line_item全部小写并且用下划线分开这会使line_item.rb文件被加载而这个文件中包含有类LineItem

  2.    把控制器(controller)分组到模块中

  现在我们所有controller都放在app/controller目录下有时候我们controller可能比较多为了不污染到顶层命名空间(),我们可以选择将某几个controller归组到个单独命名空间里

  对此Rails有个简单约定如果个请求(request)包括了controller名字例如:admin/bookRails会在app/controller/admin/目录下寻找名为book_controller控制器控制器名字最后部分将会变换成name_controller.rb并且将会从app/controller目录开始根据请求前半部分(这里是admin)来定位到子目录里

  想像下我们有这样两组controlleradmin/xxxcontent/xxx并且两组里面都有个控制器book这样在app/controller目录两个子目录app/controller/admin和app/controller/content里都有个book_controller.rb文件里面又都有类BookController如果Rails不作额外处理将会造成冲突

  为了处理这种情况Rails采取办法是在这两组controller目录里book_controller.rb文件中类声明前添加控制器所在组名字例如admin目录里book_controller.rb文件中类声明是这样:

Admin::BookController < ApplicationController
# ...
end


  而content目录下类声明是这样:

Content::BookController < ApplicationController
# ...
end


  这样两个book_controller就可以被区分开了

  在web浏览器里对controller发出请求时这样:

  http://my.app/admin/book

  在使用Rails命令行生成controller时候直接在类名前加上组名字就可以了例如:

  myapp> ruby script/generate controller Admin::Book action1 action2 ...

  OK这次就到这里吧

Tags:  rubyonrails安装 rubyrails rubyonrails教程 rubyonrails

延伸阅读

最新评论

发表评论