手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

Ruby On Rails-2.0.2源代码分析(3)-named route和resource

来源: 作者: 时间:2008-04-02
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
  1. ActionController::Routing::Routes.draw do |map|   
  2.   
  3.   map.resources :products  
  4.   ...   
  5. end  


  resources方法定义在ActionController::Resources这个module中,然后通过mixin进入到Mapper类的。那我们首先来看一看这个方法:

Ruby代码 复制代码
  1. def resources(*entities, &block)   
  2.   options = entities.extract_options!   
  3.   entities.each { |entity| map_resource(entity, options.dup, &block) }   
  4. end  


  很简单,将entities和options从参数中分离开来,然后针对每一个entity执行map_resource操作。我们继续进行,看看map_resource方法的真面目:


Ruby代码 复制代码
  1. def map_resource(entities, options = {}, &block)   
  2.   resource = Resource.new(entities, options)   
  3.   
  4.   with_options :controller => resource.controller do |map|   
  5.     map_collection_actions(map, resource)   
  6.     map_default_collection_actions(map, resource)   
  7.     map_new_actions(map, resource)   
  8.     map_member_actions(map, resource)   
  9.   
  10.     map_associations(resource, options)   
  11.   
  12.     if block_given?   
  13.       with_options(:path_prefix => resource.nesting_path_prefix, :name_prefix => resource.nesting_name_prefix, :namespace => options[:namespace], &block)   
  14.     end  
  15.   end  
  16. end  


  有了entity和options,还等什么呢?马上生成我们的Resource对象,Resource对象封装了和此resource相关的collection method,member method,new method,path prefix,name prefix,单/复数表示,还有option。生成这个Resource对象无非就是将此对象的相应属性从options中解析出来,保存起来,代码比较简单,这里就不再贴出。
  现在,Resource对象有了,从上面代码我们就可以看出来,接下来,就该处理和此resource相关named route了。具体的处理逻辑都类似,这里将map_member_actions(map, resource)拿出来作为示意,感兴趣的同学们可以自己查看相关的源代码。


Ruby代码 复制代码
  1. def map_member_actions(map, resource)   
  2.   resource.member_methods.each do |method, actions|   
  3.     actions.each do |action|   
  4.       action_options = action_options_for(action, resource, method)   
  5.       map.named_route("#{action}_#{resource.name_prefix}#{resource.singular}""#{resource.member_path}#{resource.action_separator}#{action}", action_options)   
  6.       map.named_route("formatted_#{action}_#{resource.name_prefix}#{resource.singular}""#{resource.member_path}#{resource.action_separator}#{action}.:format",action_options)   
  7.     end  
  8.   end  
  9.   
  10.   show_action_options = action_options_for("show", resource)   
  11.   map.named_route("#{resource.name_prefix}#{resource.singular}", resource.member_path, show_action_options)   
  12.   map.named_route("formatted_#{resource.name_prefix}#{resource.singular}""#{resource.member_path}.:format", show_action_options)   
  13.   
  14.   update_action_options = action_options_for("update", resource)   
  15.   map.connect(resource.member_path, update_action_options)   
  16.   map.connect("#{resource.member_path}.:format", update_action_options)   
  17.   
  18.   destroy_action_options = action_options_for("destroy", resource)   
  19.   map.connect(resource.member_path, destroy_action_options)   
  20.   map.connect("#{resource.member_path}.:format", destroy_action_options)   
  21. end  


  这里,我们可以很直观的看到,Rails为resource的member相关方法生成了众多的route,我们可以看到Controller中熟悉的show,update,destroy action。是的,在这里,Rails就为url到controller的action生成了相应的route。完成了这些基本的route生成外,Rails还会处理嵌套,关联关系(存在block的处理和map_associations)。当然,基本逻辑都和上面的逻辑类似。
  如此云云。。。针对Resource的一张庞大的route表就生成完成了

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

上一页 1 2下一页
[打印] [关闭]
Google
相关文章
上一篇:Ruby On Rails-2.0.2源代码分析(4)-寻找Controller
下一篇:插件rquerypad, 简化查询参数 增强关联查询能力
热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS