`
yangzhihuan
  • 浏览: 167519 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

RESTful&Rails学习笔记(三):在Rails下划分资源的小小经验

阅读更多
Rails支持RESTful,这个地球人都知道.在Rails认为两类的资源足以代表一切:列表和列表中的项.Rails默认的设计就是支持这两种类型的资源.

假设已经划分了了一个资源,那么在Rails里面就对应一个controller,model,view,MVC一个都不能少.当然也可以多个controller都使用同一个model,简而言之,就是一个资源对应一个Rails的controller,4个HTTP方法就对应controller里面的index,new,create,edit,update,show,destroy这7个方法.
举个例子:就拿一个blog来说事吧.
最近的blog是一个资源,对应BlogsController,查看blog列表对应的是index方法(HTTP GET),某一篇blog对应的是show(HTTP GET)方法.
那么,最受欢迎的blog按照RESTful资源的划分,也应该是一个资源.在Rails里面,也是对应一个controller么?比如叫做HotBlogsController.
如果我还有最多人收藏的blog,2008年撰写的blog......,按照Rails默认的风格,那岂不是要对应N个controller了?可以肯定地说,不用一会,你的controller就泛滥了.

刚开始的时候,我确定是这样做的,因为按RESTful的划分方法,最新的blog和最受欢迎的blog确实是两个资源,对于资源的表示,应该是用两个不同的URL来表示的.比如:/blogs表示最近的blog,/hotblogs表示最受欢迎的blog.
这个无可厚非的,这样的划分清楚明白,一看url就知道是啥东西了,符合当前web2.0的友好url的习惯,当然最重要的是用上一http的get方法,但并没有传统的那种rpc风格的url调用那样,后来来了一串的参数,尤其是这种:/blog?method=hot,/blog?method=recent...这本是好事,但放到rails里面,如果一个资源就对上一个controller的话,看着一堆的controller估计就是郁闷无比,而且这些资源只是一些条件不同而已,可能就是一个参数k=1,另外一个就是k=2的差别,就为了RESTful,我就得为了这个写上一个controller吗?
你接受得了吗?
估计现在RESTful还是不太流行,就是因为要遵守RESTful的约束和限制,按现在主流的开发思想来说是一件麻烦事吧.谁也不愿意为了k=1和k=2的差别就多写一个controller,就算RESTful吹上了天,还是不行!偶们都是干实事的人,不能为了RESTful而RESTful啊.

我用了一个折衷的方法解决此问题.
还是用上面的例子,最新的blog和最受欢迎的blog是两个不同的资源,但在Rails里面都对就同一个controller:BlogsController,两个不同的资源,当然有两个不同的资源表示,/blogs/recent就表示最新的blog,/blogs/hot就表示最受欢迎的blog.我只是在route.rb里做了一个小小和改动:
map.connect 'blogs/recent',:controller => 'blogs'               
map.connect 'blogs/hot',:controller => 'blogs'


这样做的好处就是不用为只是一个查询条件不同的资源又写一个controller,使用这种方法看似是在index方法里处理多个事情,不符合单一原则,其实不然,只要不过分,并且觉得好用,有什么是不可以的呢?

貌似比较简单,不过个问题着实困扰了我很久.相通此节,舒了一口气...

分享到:
评论
3 楼 dcheng 2008-12-12  
liuqiang 写道

感觉你这个太勉强了,为了restful而restful,这样如何?
引用
map.resources :blogs, :collection => {:recent => :get, :hot=> :get}
 


这样的方法不错,直接在controller 里面定义两个方法的实现。比较简洁。
2 楼 yangzhihuan 2008-10-28  
明白你的意思了.
你的方法比我的好!
1 楼 liuqiang 2008-10-28  
<div class='quote_title'>感觉你这个太勉强了,为了restful而restful,这样如何?</div>
<div class='quote_title'>引用</div>
<div class='quote_div'><br/>map.resources :blogs, :collection =&gt; {:recent =&gt; :get, :hot=&gt; :get} <br/><br/></div>
<p> </p>

相关推荐

    ruby on rails 实践

    最后,本书的作者李玮,具有丰富的Rails开发经验,曾在多个知名项目和公司中担任Rails开发工作。在介绍作者背景时,书中也提供了作者的个人信息、工作经历以及联系方式,便于读者进行问题反馈和进一步的交流。

    mytestrails

    11. **Webpacker**:在较新的 Rails 版本中,用于集成 JavaScript 和 CSS 资源的管理,取代了以前的 Asset Pipeline。 通过阅读 "railstutorial4th-1.0.0.pdf",读者可以期待涵盖以上各个领域的详细指导,包括设置...

    React-Rails-Notes-app:具有Rails,PostgreSQL,React和Bootstrap的Notes应用

    通过这个项目,你可以学习到如何将React与Rails集成,理解RESTful API的工作原理,以及如何使用PostgreSQL存储数据。此外,你还可以深入了解前端开发中的状态管理、组件通信,以及如何利用Bootstrap提高开发效率。...

    oyk_2019_yaz_ruby_rails:坎普sürecindeanlatımıyapılankonularıyazılıbir kaynak haline getirerek saklar。 NotlarşuanHAMVERİaşamasındadır。 杜岑伦米米

    "杜岑伦米米"可能是创建者或项目负责人,暗示这可能是一个个人或团队的学习笔记。"HAMVERİ"阶段可能指的是项目的开发或学习进度,暗示这些材料正在进行不断的更新和改进。 Ruby on Rails(RoR)是一个基于Ruby语言...

    notes_about_rails:我关于Rails源代码的注释-ab source code

    Rails,全称Ruby on Rails,是由David Heinemeier Hansson创建的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式。Rails是用Ruby编程语言编写的,以其生产力高、代码简洁优雅而闻名。在这个“notes...

    后端语言的学习笔记.zip

    "后端语言的学习笔记.zip"这个压缩包很可能包含了关于各种后端编程语言的学习资源,特别是那些用于构建动态网站和Web服务的语言。尽管没有具体的标签提供额外信息,我们可以推测这可能涵盖了诸如Java、Python、Node....

    ruby-on-the-way:学习 ruby 和 rails 相关资料

    本资料包“ruby-on-the-way”显然是一份用于学习Ruby和Rails的资源集合,旨在帮助初学者掌握这两项技术。 首先,让我们深入了解Ruby语言的关键特性: 1. 动态类型:Ruby不像Java或C++那样需要提前声明变量的类型,...

    easy_journal_app:使用Ruby on Rails制作的应用程序

    "简易日记"应用程序是使用Ruby on Rails框架开发的一款个人日志记录工具,旨在提供一个简单易用的平台,让用户能够方便地记录生活点滴、想法感悟或者工作笔记。Ruby on Rails,简称Rails,是一款基于Ruby语言的开源...

    Spring Boot 笔记

    ### Spring Boot 笔记 #### 一、Spring Boot 概述与入门 ##### 1.1 Spring Boot 的定义与特点 - **定义**: Spring Boot 是 Spring 社区的一个新项目,旨在简化基于 Spring 的应用程序和服务的开发过程。它提供了...

    Learning-RubyOnRails:这包含了我为这门课程所做的所有工作。 酷的东西

    "表明你正在进行的项目或学习笔记还没有达到预期的完整状态,这很正常,因为学习和开发往往需要时间来完善。 标签"Ruby"则强调了这个项目的核心语言是Ruby,它是Rails的基础。Ruby语言以其简洁、清晰的语法和对...

    阅读笔记:这是我对CodeFellows的阅读笔记

    笔记可能还包括代码示例、项目经验分享和学习资源推荐,这对于其他学习者来说是一份宝贵的参考资料。如果你对某个特定主题感兴趣,可以查看"reading-notes-main"目录下的文件,进一步探索亨特的学习旅程和收获。

    全栈工程师修炼指南 下载下载因为太大存百度云盘3.zip

    由于压缩包中包含的唯一文件是“全栈工程师修炼指南 下载下载因为太大存百度云盘3.txt”,我们可以假设这可能是课程内容的概述、笔记、目录或者是进一步的学习资源链接列表。通常,这样的文本文件会提供每个主题的...

    fullstackopen:我的笔记和课程文件的地方

    在这个主题下,"我的笔记和课程文件的地方"这部分描述,可能是指作者或分享者在学习全栈开发过程中积累的个人资料库。这通常包括对所学内容的理解、关键概念的总结、项目实践的记录以及可能的代码片段。这样的资源...

    发射学校核心课程:发射学校核心课程的笔记和练习

    【发射学校核心课程】是一门综合性的学习资源,旨在教授编程和后端开发的基础知识,适合初学者和希望深入理解编程技术的人群。这门课程的笔记和练习部分提供了丰富的学习材料,帮助学生巩固理论知识并提升实践能力。...

    web开发lytjweb开发lytj

    在Web开发领域,"lytj"可能是"学习笔记"或特定项目名称的缩写,但没有足够的信息来确定其具体含义。不过,我们可以根据Web开发的通用概念和流程来探讨相关知识点。 Web开发通常涉及构建和维护互联网上的应用程序、...

    talks:这是 Web 开发讲座笔记的汇编

    【Web开发讲座笔记汇编】是一份集合了各种会议、聚会以及相关活动中的Web开发演讲内容的资源。这个压缩包“talks-master”很可能是包含了这些演讲的详细笔记、幻灯片、代码示例和其他相关材料,旨在帮助开发者回顾、...

    cb-wd-7-notes

    【标题】"cb-wd-7-notes" 指的可能是一个关于计算机编程或网络技术的学习笔记集合,其中“cb”可能是课程代码或作者的缩写,“wd”可能代表“Web开发”(Web Development),而“7”可能是课程的阶段或部分编号。...

    zellytozelly

    在“zellytozelly-main”这个文件名中,如果没有更多的上下文信息,我们可以假设它可能是一个项目的主分支或者主要代码仓库,包含着开发者的学习笔记、代码示例或实际项目的源代码。 总之,“zellytozelly”项目...

Global site tag (gtag.js) - Google Analytics