1.关于REST的URL的详细讨论,参见《RESTful Rails development》文档,
这里有中文翻译。Path-Methods对照表:
2.在Controller和View中新增加了一些helper方法,URL路由的设置来自config目录下的routes.rb中的一行代码:
<!----> map.resources :projects
这行代码将自动产生用于Controller的系列url方法和用于View的系列Path方法,对照表
路由 产生的Helper
-----------------------------------------------------------
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)
3.路由的定制,通过下面的选项来定制符合个人需要的路由规则:
<!---->:controller. 设置使用的Controller.
:path_prefix. URL前缀.
:name_prefix. 用于设置产生的helper方法的前缀
:singular. To name the singular name to be used for the member route.
4.Nested Resource(嵌套资源乎?),当rails采用REST架构时如何处理过去的Model之间的关联关系,比如1:N?比如以文档中的例子来说明,一个project可能有多个iteration,典型的一对多关系,我们在产生Model后,与传统rails一样,设置关联关系:
<!---->class Project < ActiveRecord::Base
has_many :iterations
end
class Iteration < ActiveRecord::Base
belongs_to :project
end
1)既然是REST架构,那么路由改如何设置呢?或者说我们该怎么访问某个project的所有itration呢?直观的感觉应该是http://localhost:3000/project/:project_id/iterations,那么可以这样修改routes.rb,把生成的
<!---->map.resources :iterations
修改为:
<!---->map.resources :projects do |projects|
projects.resources :iterations
end
将自动产生如下格式的路由:
<!---->/project/:project_id/iterations
/project/:project_id/iterations/:id
2)接下来,应当修改IterationsController的增、改、查action了,因为要关联project对象,在Controller中可以通过params[:project_id]获取该iteration所在的project。比如修改index action:
<!---->def index
project = Project.find(params[:project_id])
@iterations = project.iterations.find(:all)
respond_to do |format|
format.html # index.rhtml
format.xml { render :xml => @iterations.to_xml }
end
end
3)相应的iteration的Controller和View的Url和Path等helper都增加了一个参数,他们的第一个参数都将是project_id,比如
<!----><%= link_to "Show",iteration_path(iteration.project,
iteration) %>
<%= link_to "Edit", edit_iteration_path(iteration.project,
iteration) %>
同样,所有form_for指向的url的helper也都增加了这个参数。总结一句话,被嵌套类(这里的iteration)的所有helper都增加一个参数并且是第一个参数——外包类(这里的project)的id
5.自定义action,对于不能归结为crud操作的action,我们需要自己定义action,已经说过,REST把所有的远程调用抽象为对远程资源的CRUD操作,非CRUD操作应当转化或者说抽象成CRUD操作,比如对于project可以有一个关闭操作close,我们可以把它理解成一个http POST请求去修改project的closed字段为true,这样一来这个操作也可以当作CRUD操作了。需要做的是在routes.rb增加一行:
<!---->map.resources :projects, :member => { :close => :post }
定义close action是POST方法,在Controller增加close方法:
<!---->def close
respond_to do |format|
if Project.find(params[:id]).update_attribute(:closed, true)
flash[:notice] = "Project was successfully closed."
format.html { redirect_to projects_path }
format.xml { head :ok }
else
flash[:notice] = "Error while closing project."
format.html { redirect_to projects_path }
format.xml { head 500 }
end
end
end
你可以通过http://localhost:3000/project/:project_id;close来调用此方法,请注意,POST的方法需要通过Form来实现,因此我们使用button_to:
<!----><td><%= button_to "Close", close_project_path(project) %></td>
自定义action不仅仅可以使用REST风格,传统的controller/action/id的方式仍然可以使用,注意下routes.rb的最后两行即可。
6.自定义格式,rails支持的格式有:
<!---->respond_to do |wants|
wants.text
wants.html
wants.js
wants.ics
wants.xml
wants.rss
wants.atom
wants.yaml
end
自定义格式需要在config/environment.rb中增加一行进行注册,比如pdf格式?
<!---->Mime::Type.register "application/pdf", :pdf
当然,你需要实现自己的to_pdf方法了
7.在rails1.2中使用AJAX与过去没有什么不同,仅仅是页面调用的URL全部改成新增加的那些Path helper
8.激动人心的ActiveResource,目前还未正式加入rails1.2,值的期待,简单来说就是就是通过这个库你将可以使用所有按照REST实现的web APIS,操作远程的资源将和操作本地的ActiveRecord一样。
《RESTful Rails Development》下载
分享到:
相关推荐
REST(Representational State Transfer)是一种软件架构风格,用于定义客户端与服务端之间交互的标准方式。RESTful API是基于HTTP协议设计的,通过不同的HTTP方法(如GET、POST、PUT和DELETE)来执行对应的操作,并...
除了上述基础内容外,Rails框架还支持其他一些与REST相关的特性,包括但不限于: - **AJAX集成**:利用JavaScript和Ajax技术来增强用户体验,使得RESTful API可以与现代前端技术无缝结合。 - **RESTful应用测试**:...
总结来说,"使用rails编写REST风格的web应用"涉及的内容包括Rails框架基础、MVC模式的理解、RESTful设计原则的应用、路由配置、控制器和模型的编写、视图渲染以及相关的测试和安全措施。学习这部分内容将使开发者...
Ruby on Rails是一个突然流行...本文介绍Rails中的Web服务,重点放在一个名为Representational State Transfer (REST)的策略上。本文介绍了如何在Ruby on Rails中添加REST风格的Web服务,并从Ruby和Java代码调用服务。
标题与描述均指向了"使用Rails编写REST风格的Web应用"这一主题,这是一份深入探讨如何运用Ruby on Rails框架来构建遵循REST(Representational State Transfer)架构风格的Web应用程序的指南。REST作为一种架构风格...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
### Ruby on Rails 2.1新特性详尽解析 #### 概述 Ruby on Rails,一个备受推崇的Web开发框架,自2004年由David Heinemeier Hansson首次发布以来,便以其优雅的设计和“约定优于配置”的理念赢得了全球开发者的心。...
【Ruby on Rails 2.0的新特性介绍】 Ruby on Rails 2.0 是这个流行的Web开发框架的一个重大更新,发布于2007年底。Rails以其快速的版本迭代和创新的功能而闻名,从1.0到2.0的升级也不例外。这次更新带来了许多新...
这本书主要讲述了Ruby on Rails 4版本的核心特性和最佳实践。Ruby on Rails(简称Rails)是一个用Ruby语言编写的开源全栈Web应用框架。本书深入浅出地介绍了Rails 4的各种组件和功能,适合已经熟悉Ruby编程并希望...
总的来说,《RESTful Rails Development》这本书将帮助读者理解如何利用Rails的特性来构建符合REST原则的应用,提高开发效率并提供优秀的用户体验。通过阅读这本书的翻译版,开发者不仅能学习到RESTful设计模式,还...
Rails Rest Vote是一个Ruby Gem,可为任何模型的Rails应用程序添加投票功能,并公开其RESTful API。 如果您在Web应用程序中以及移动应用程序中使用了诸如angular2之类的任何前端客户端,那将非常有帮助。 先决条件...
在 Rails 应用中使用 Cucumber-Rails,开发者可以创建一个名为`features`的目录,里面包含这些Gherkin特性文件。每个特性文件描述了一个或多个业务场景,并使用关键字`Given`、`When`、`Then`等来定义步骤。这些步骤...
### Rails 101 入门电子书知识点详解 #### 一、简介 ...通过以上内容的学习,初学者可以全面掌握Ruby on Rails的基础知识,包括环境搭建、基本操作、高级特性等,为后续更深入的学习打下坚实的基础。
Rails提供了许多安全特性,如CSRF(跨站请求伪造)保护、XSS(跨站脚本攻击)防御和参数过滤。开发者还需要遵循RESTful设计原则,合理使用过滤器,确保敏感信息的安全。 9. **部署与运维**: 项目部署通常选择...
Rails 2.1.0引入了许多新特性,例如活动记录(ActiveRecord)的自动保存关联、部分渲染以及自定义验证选项等。 7. **activerecord-2.1.0.gem**:ActiveRecord是Rails中的ORM(对象关系映射)库,负责将数据库表映射...
- **学习路径**:继续深入学习Rails的高级特性,如Active Record模式、表单构建器等。 - **社区资源**:加入Rails官方论坛、Stack Overflow等社区获取帮助和支持。 #### 十一、文档编写技巧 - **重要性**:良好的...
这一章节将讨论Rails中的安全特性,如防止SQL注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等。通过实施这些防护措施,可以大大降低应用遭受攻击的风险。 #### 9. Advanced Topics(高级主题) 这一部分将覆盖...
Rails的核心特性包括: 1. **约定优于配置**(Convention Over Configuration):Rails通过默认的约定减少开发者需要明确配置的细节,如数据库表名与类名的对应关系。 2. **Active Record**:这是Rails中的ORM(对象...