读了
http://www.iteye.com/topic/38653,
想从代码方面谈一谈对Rails 1.2中的RESTful application 的感受。
我有User 和 Article两个Model,并且需要某一个User未读的所有Article。我的第一灵感就是声明一个has_and_belongs_to_many(好长的方法啊,每次都怕敲错)。
class User < ActiveRecord::Base
has_and_belongs_to_many :articles
end
class Article < ActiveRecord::Base
has_and_belongs_to_many :users
end
很简单是吧,那么Controller怎么写呢?
class UsersController < ApplicationController
def add_unreaded
@user.articles << @article
end
def remove_unreaded
@user.articles.delete @article
end
end
等一下,我这么写行不行呢?
class ArticlesController < ApplicationController
def add_fresh_reader
@article.users << @user
end
def remove_fresh_reader
@article.users.delete @user
end
end
这两种写法哪一个好呢?我踌躇,我犹豫,我翻来覆去睡不着觉。
... ...
如果把HTTP之上的所有请求都看成资源的操作的话。add_fresh_reader操作什么资源呢?提这个问题的同时,一个新model浮现了出来:Unreaded 。
class User < ActiveRecord::Base
has_many :articles, :through => :unreadeds
end
class Article < ActiveRecord::Base
has_many :users,:through => :unreadeds
end
class Unreaded < ActiveRecord::Base
end
class UnreadedsController < ApplicationController
def create
@unreaded = Unreaded.create(params[:unreaded])
end
def destroy
@unreaded = Unreaded.find(params[:id])
@unreaded.destroy
end
end
又见到似曾相识的"create", "destroy"。 如果使用资源的方式思考,我们就会发现,CRUD is everything!
Constraints is Freedom
CRUD 形成了一种约束,把我们从权衡Controller和action风格这种无聊的事情中解脱出来,按照统一的风格来编写程序以及构造URL。使我们有精力关注更重要的事。
REST还避免我们编写大的Controller。可曾有人后悔曾经写过的包含十几个action的,并且action之间毫无联系的Controller呢? 其实大部分情况下,一个Controller有7个action就够了,并且这些action关注于同一Model,大大提高了正交性.
还有什么好处,欢迎大家补充。
分享到:
- 2006-12-13 15:15
- 浏览 13045
- 评论(26)
- 论坛回复 / 浏览 (24 / 20827)
- 查看更多
相关推荐
### RestFul_Rails_Dev_v_0.1 关键知识点解析 #### 1. REST 概念与背景 REST(Representational State Transfer)是一种...在 Rails 中实现 RESTful 开发不仅可以提高开发效率,还能确保应用程序的一致性和可扩展性。
【RESTful Rails Development】 REST,全称为Representational State Transfer,是一种基于HTTP协议的设计原则,由Roy Fielding在其博士论文中提出。REST的核心思想是利用HTTP的GET、POST、PUT、DELETE等方法来操作...
- **RESTful路由**:对RESTful路由进行了改进,使其更加符合REST原则,同时也更加易于理解和维护。 ##### 3.6 异常处理 - **异常处理**:Rails 2.0引入了`rescue_from`机制,允许开发者更优雅地处理异常,并可以...
Ruby on Rails自版本1.2起就内置了对REST的支持,这极大地简化了Web应用的开发过程。 - **RESTful路由**:通过定义路由,可以自动地为不同的HTTP动词映射到相应的控制器动作。 - **资源控制器**:每个资源都对应一...
根据提供的标题、描述以及部分内容,我们可以清晰地了解到这段文本记录了一次安装Ruby on Rails及其...对于开发者来说,理解这些依赖库的工作原理及其如何集成到Rails中是非常重要的,这有助于更高效地进行Web开发。
Ruby on Rails是遵循REST原则的开源Web开发框架,自1.2版本起,RESTful设计成为了其核心理念。Rails框架通过约定优于配置(Convention over Configuration)的原则,使得开发者能快速构建RESTful应用。本项目将运用...
Ruby作为一种面向对象的、动态且强大的编程语言,因其简洁的语法和丰富的库支持,在Web开发领域尤其是Ruby on Rails框架中有着广泛的应用。 一、Ruby基础 1.1 Ruby介绍:学习Ruby的历史、特点以及它在软件开发中的...
Rails利用REST软件架构思想对网络服务也提供了一流的支持。从最直观的角度看待REST,它是网络服务最理想的手段,但是Rails框架把REST带到了网络应用软件开发框架。这是一次飞跃,让REST的思想从网络服务的应用提升到...
RESTful API设计原则要求API清晰、直观、易于理解。在本系统中,我们遵循以下规则: - 使用标准HTTP方法:GET用于检索信息,POST用于创建信息,PUT用于更新信息,DELETE用于删除信息。 - URL命名简洁明确,使用名词...
- **RESTful 路由**:支持 RESTful 设计风格的 URL 结构。 **5.3 ActiveRecord** - **模型定义**:定义数据库表对应的类。 - **数据库迁移**:用于修改数据库结构的脚本。 - **关联**:定义模型之间的关系,如 `...