也谈一下我对Rails 1.2中 Restful的理解

读了[url=http://www.iteye.com/topic/38653] http://www.iteye.com/topic/38653[/url],
想从代码方面谈一谈对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!

[size=18][color=blue]Constraints is Freedom[/color][/size]

CRUD 形成了一种约束,把我们从权衡Controller和action风格这种无聊的事情中解脱出来,按照统一的风格来编写程序以及构造URL。使我们有精力关注更重要的事。

REST还避免我们编写大的Controller。可曾有人后悔曾经写过的包含十几个action的,并且action之间毫无联系的Controller呢? 其实大部分情况下,一个Controller有7个action就够了,并且这些action关注于同一Model,大大提高了正交性.

还有什么好处,欢迎大家补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值