本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7645538
建立时间:2006年5月29日




[Ruby on Rails]simply_restful in Rails Core
软件技术

lhwork 发表于 2007/2/8 10:37:22

现在 Rick 已把 simply_restful 插件集成到了 Rails 核心内, Rails 内的 RESTful 设计变得越来越有趣。我发现大多数文档是相当过时的,它的你为什么应该使用具名路由,url 生成等等介绍得很少。 一、URL 结构: 首先,这是大家熟悉的东西:URL 结构。有三个基本的URL ,但每一个都以不同的方式来应答各种 HTTP 动词。使用一个 Order 模型来说明: --------------------------------------------------------------------------------- 具名路由 URL HTTP 动词 控制器动作 ---------------------------------------------------------------------------------- orders_url /posts GET index orders_url /posts POST create order_url /posts/:id GET show order_url /posts/:id PUT update order_url /posts/:id DELETE destroy new_order_url /posts/new GET new edit_order_url /posts/:id;edit GET edit ------------------------------------------------------------------------------- 复数形式的具名路由可以被认为是“集合” URL 。它允许在一个整体上操作集合: 1、得到所有条目清单,这个例子内是 orders (GET) 2、创建个新条目(POST) 换句话说,单数形式的具名路由被用于引用集合内的一个特定条目:在这个例子中是 post 。通过使用 GET,PUT,和 DELETE 动词,你可在这个条目上操作: 1、显示特定条目的属性(GET) 2、更新特定条目的属性 (PUT) 3、删除一个特定的条目 (DELETE) 这儿有两个“奇怪的”URL:’new’ 与 ‘edit’ 。它们被用于显示“create”与“update”URL的表单(通过适当的动词)。 二、设置 routes.rb 文件: 要把一个模型做为一个资源,对于可以按上面描述的方式进行管理的条目,你在 config/routes.rb 文件添加下面行: ActionController::Routing::Routes.draw do |map| map.resources :orders end 可以同一行内指定多个资源,以减少混乱: map.resources :orders, :invoices, :customers 资源也可以被嵌套,以产生类似的 URL如,/orders/1/invoices/3 : map.resources :orders do |map| map.resources :invoices end rescource 方法有一些可选参数,但我暂时先不讲…。 三、控制器: 有七个标准的控制器动作。下面以 Order 模型为例子: class OrdersController < ApplicationController def index end def show end def new end def create end def edit end def update end def destroy end end 这些样板代码足够应答所有的由 map.resources 调用定义的默认 URL 。 四、参数: 当请求单数的 URL 时,你可访问 params[:id] 变量内的的 ID。 Create 或 update 请求会让你通过访问 params[:entity_name] ,在一个 hash 内得到新属性。 当请求嵌套的 URL 时(如上面描述的),你可以访问基于模型名字的所有“父”ID。例如,如果你在定单内被嵌套的发票,像上面例子,你可在控制器内收到 params[:order_id]。 五、具名路由: 使用具名路由非常容易。假设有个 Order 模型,像以前一样,对于单数的 URL ,你可在 @order 变量内得到一个有效定单的实例,你可以链接各种控制器动作: ------------------------------------------------------ 控制器动作 ---- 方法调用 -------------------------------------------------------- index ---- link_to orders_url show ---- link_to order_url(@order) new ---- link_to new_order_url create ---- form_for :order, :url => orders_url, :html => { :method => :post } edit ---- link_to edit_order_url(@order) update ----- form_for :order, :url => order_url(@order), :html => { :method => :put } destroy ---- link_to order_url(@order), :method => :delete ---------------------------------------------------------------- 注意你可以直接传递你希望的实例给单数路由器。还要注意 :method 参数没有在具名路由中给出,相反它被传递给 link_to 或 form_for(或者是它们变体)。 具名路由对嵌套 resource 操作是一样的;你只需要传递“父”的 resource 做为第一个参数: 嵌套路由: invoices_url(@order) invoice_url(@order, @invoice) http://david.goodlad.ca/articles/2006/08/02/simply_restful-in-rails-core


阅读全文(2424) | 回复(1) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.781 second(s), page refreshed 144792095 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号