应用Rails进行REST 开发(四)

Controller 里的URL 方法

在View中,我们已经使用了一些新的helper 方法(也就是path方法)来生成了REST风格的URL,那么controller 自然也需要一些新的东西来处理redirect 等请求。在controller中,我们使用“url”helper 方法,来生成正确的REST风格的URL。


project_url 对应 project_path
projects_url 对应 projects_path


和 “path” 方法向对比,“url” 方法生成了一个完整的URL地址,包括协议,主机,端口,以及路径。
project_url(1)
=>
"http://localhost:3000/projects/1 "
projects_url
=>
"http://localhost:3000/projects "


在Rails 应用的controller里,”url” 方法用在redirect_to 方法里,取代传统的 controller/action 的方式。
redirect_to :controller => "projects", :action => "show",:id => @project.id


在REST应用中应该这么写:


redirect_to project_url(@project)


对于这一点,你可以把 destroy action 作为一个例子去看看:在一个资源被删除以后,使用 project_url 去显示全部的资源,而不是像以往一样使用controller,action 作为参数。


Listing 1.3: ontrack/app/controllers/projects controller.rb
def destroy
@project = Project.find(params[:id])
@project.destroy
respond_to do |format|
format.html { redirect_to projects_url }
format.xml { head :ok }
end
end

REST 风格的路由

到目前为止,我们介绍了REST的内容,以及在 链接,form,controller中所适用的一些新的helper方法。但是我们没有解释那些helper方法是从哪来的?决定那些方法存在的,以及 指定那些方法会调用哪个controller的哪个action,就是一个文件,那就是 /config/routes.rb。


map.resources :projects


这个配置是由我们上面适用 scaffold 生成器生成的。生成器生成了一个路由,当处理请求时,controller 需要这个路由才能知道调用哪个action。此外,resources 生成了path 和 url 的helper方法去操作“project”这个资源。

projects projects_url, projects_path
project project_url(id), project_path(id)
new_project new_project_url, new_project_path
edit_project edit_project_url(id), edit_project_path(id)

习惯

要进行REST风格的开发,就必须遵循REST方式的命名习惯,多针对 CRUD四个操作而言。下面的link_to 将会产生如下的html:


link_to "Show", project_path(project)
=>
<a href="/projects/1">Show</a>


不管是link_to 方法中,还是生成的html中,都没有去指定要调用的action,Rails 会知道,如果使用Get方式来调用这个URL,那么就是去调用show这个action。因此,controller里就必须有一个名字为“show”的 action。对于index, update, delete,create, destroy,new,edit,也都是相同的习惯,所以,每一个REST的controller 都必须实现这几个方法。

定制路由

定制路由
通过以下一些选项,REST的路由可以去适应应用的一些特殊需求:


:controller. 指定使用哪一个controller
:path prefix. 生成的URL的前缀。
:name prefix. Helper方法的前缀。包括 url方法和path方法。
:singular. 对于一个路由,命名一个唯一的名字。


下面的例子创建了一个路由,用于新建一个Sprint资源,sprint的信息我们会在下面的章节中介绍。


map.resources :sprints,
:controller => "ontrack",
:path_prefix => "/ontrack/:project_id",
:name_prefix => "ontrack_"


在这个URL中,我们适用了 :path_prefix,意味着每一个URL都必须以/ontrack/+project id 开始,对应的controller 应该是 OntrackController。因此这个URL http://localhost:3000/ontrack/1/sprints 根据路由的规
则,会调用 OntrackController的index 方法,而这个URL“http://localhost:3000/ontrack/1/sprints/1
”则会调用 show 方法。:path_prefix 定制了URL的格式,那么 :name_prefix 则会修改helper的方法的名字:


ontrack_sprints_path(1)
=>
/ontrack/1/sprints
or
ontrack_edit_sprint_path(1, 1)
=>
/ontrack/1/sprints/1/edit

 

好了,今天就说到这,下章我们来说说嵌套资源的REST风格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值