浏览 2205 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-28
假设已经划分了了一个资源,那么在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方法里处理多个事情,不符合单一原则,其实不然,只要不过分,并且觉得好用,有什么是不可以的呢? 貌似比较简单,不过个问题着实困扰了我很久.相通此节,舒了一口气... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-28
感觉你这个太勉强了,为了restful而restful,这样如何?
引用
map.resources :blogs, :collection => {:recent => :get, :hot=> :get}
|
|
返回顶楼 | |
发表时间:2008-10-28
明白你的意思了.
你的方法比我的好! |
|
返回顶楼 | |
发表时间:2008-12-12
liuqiang 写道 感觉你这个太勉强了,为了restful而restful,这样如何? 引用 map.resources :blogs, :collection => {:recent => :get, :hot=> :get} 这样的方法不错,直接在controller 里面定义两个方法的实现。比较简洁。 |
|
返回顶楼 | |