- 浏览: 458643 次
- 性别:
- 来自: Runner
文章分类
- 全部博客 (97)
- commons (3)
- EJB3 (5)
- liferay (1)
- 设计模式 (1)
- JBoss (1)
- 常用 (6)
- guice (4)
- JAX-WS (1)
- 持久层处理 (3)
- 单元测试 (3)
- jmesa (6)
- mongodb (3)
- View显示 (6)
- lucene (1)
- struts2 (2)
- spring security (2)
- spring (4)
- hibernate (1)
- mysql (1)
- ruby (21)
- python (2)
- ubuntu (1)
- ibatis (2)
- javascript (3)
- 数据库 (1)
- swing (1)
- java基础 (2)
- dojo (1)
- android (9)
最新评论
-
BigHanson:
写得非常棒,醍醐灌顶 可以转发吗
spring security验证流程 -
背后的光:
spring security验证流程 -
hanlongjie:
commons-lang(time应用) -
litianpeng:
虽然是2009年写的帖子 不过还是要请问一下先生 我按照你的 ...
Ajax Fancy Capcha -
蔡小鱼:
ibatis总结
rails3中有许多变化,现在也只能看一点说一点了,趁现在还有点心情,赶快把它整理写下来。
对于ActionController来说,一个比较明显的改进就是对respond_to的处理,这主要涉及到REST方面的处理。
比如在rails2中:
在rails3中则可以进行简写:
当然还要在application_controller.rb中加句代码:
从rail2.3开始,protect_from_forgery默认便是开启状态。至于此代码的作用以前也没在意,在网上找了一下:
protect_from_forgery - A feature in Rails that protects against Cross-site Request Forgery (CSRF) attacks. This feature makes all generated forms have a hidden id field. This id field must match the stored id or the form submission is not accepted. This prevents malicious forms on other sites or forms inserted with XSS from submitting to the Rails application.
当然有些方法会麻烦点:
这个方法处理起来就要麻烦一点了:
因为验证通过才创建对象,否则返回原来创建的页面并显示相应的错误信息。这个地方有个小问题,那就是通过REST的方式来操作即以xml的方式请求时,返回不了相应的错误信息。
而且上面的方法并没有简化多少,毕竟输出xml或html格式的代码大多都是可重复利用的,因此rails可以做得更好,rails3的确做到了,那就是ActionController::Responder,这个类完美的解决了输出格式的问题。此类文档里面有说明:
# Using Rails default responder, a POST request for creating an object could
# be written as:
#
# def create
# @user = User.new(params[:user])
# flash[:notice] = 'User was successfully created.' if @user.save
# respond_with(@user)
# end
#
# Which is exactly the same as:
#
# def create
# @user = User.new(params[:user])
#
# respond_to do |format|
# if @user.save
# flash[:notice] = 'User was successfully created.'
# format.html { redirect_to(@user) }
# format.xml { render ml => @user, :status => :created, :location => @user }
# else
# format.html { render :action => "new" }
# format.xml { render ml => @user.errors, :status => :unprocessable_entity }
# end
# end
# end
因此创建方法将变得非常的简单:
当然这个方法简化了很多,似乎有些神奇,主要过程就是通过respond_with调用ActionController::Responder内部相应的方法,然后。。,然后该干嘛干嘛,就不用管了。rails里面就是有这么多神奇的地方,要明白其中的原理就有些高深了,反正读rails源码要比读java框架的源码难得多,因为封装得太深了。
如果要手动控制跳转的路径可以这样:
当然更简单的方式是这样的:
也就是说redirect_to大概与location的作用差不多。上面这段代码中users_url是一个比较有意思的东西,现在还不能很好解释清楚,虽然没有明确的定义,但它确实是有值的,上面代码的意思表示创建一用户成功后跳转到显示整个users列表的页面,即./users页面。如果不要那个:location=>users_url,则会跳转到显示显示单个user的页面。如果要细究的话,这个respond_with是处理方式还是很复杂的,看着别人用不会有问题,如果稍微变一下就会有问题。主要是用来处理rest的数据交互,不然的话直接用redirect_to,这个方式就不那么让人困惑。
当然respond_with也有:status与:head等属性。比如:
可以写成:
不过有个问题,在IE7中删除这个功能居然不能用,应该是JS的问题,在Firefox没什么问题,由于开始测试的时候用的时IE7,让本人郁闷了不少时间。
现在想想可能是html5,rails3好像采用了html5的特性,IE7怎么可能支持呢?
这篇文章只是简单的介绍了一下respond_with,如果要想知道这些action的跳转方式及跳转原理的话,那又会是一个相当麻烦的话题,涉及的内容很多。同时在rails3中也有比较大的变化,总之rails的URL跳转封装得太深,虽然用起来很方便,但理解起来却比较困难。
最近发现别看着rails有许多强大的特性,但如果要明白它的实现原理的话,还是非常复杂的,可能比java还要复杂得多,毕竟struts,spring,hibernate实现机制相对来说容易理解一些,java框架的实现总体来说是比较平滑的,而rails则不同,里面有很多激进的方式,跨度很大,而且版本变更也很大,理解起来要困难得多。
参考文章:
http://weblog.rubyonrails.org/2009/8/31/three-reasons-love-responder
http://blog.plataformatec.com.br/2009/08/embracing-rest-with-mind-body-and-soul/
http://ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with/
对于ActionController来说,一个比较明显的改进就是对respond_to的处理,这主要涉及到REST方面的处理。
比如在rails2中:
def index @users = User.all respond_to do |format| format.html # index.html.erb format.xml { render :xml => @users } end end
在rails3中则可以进行简写:
def index @users = User.all respond_with(@users) end
当然还要在application_controller.rb中加句代码:
class ApplicationController < ActionController::Base respond_to :html, :xml protect_from_forgery end
从rail2.3开始,protect_from_forgery默认便是开启状态。至于此代码的作用以前也没在意,在网上找了一下:
引用
protect_from_forgery - A feature in Rails that protects against Cross-site Request Forgery (CSRF) attacks. This feature makes all generated forms have a hidden id field. This id field must match the stored id or the form submission is not accepted. This prevents malicious forms on other sites or forms inserted with XSS from submitting to the Rails application.
当然有些方法会麻烦点:
def create @user = User.new(params[:user]) respond_to do |format| if @user.save format.html { redirect_to(@user, :notice => 'userwas successfully created.') } format.xml { render :xml => @user, :status => :created, :location => @product } else format.html { render :action => "new" } format.xml { render :xml => @user.errors, :status => :unprocessable_entity } end end end
这个方法处理起来就要麻烦一点了:
def create @user= User.new(params[:user]) respond_with(@user) do |format| if @user.save flash[:notice] = "userwas created successfully." format.html { redirect_to @user} else format.html { render :action => :new } end end end
因为验证通过才创建对象,否则返回原来创建的页面并显示相应的错误信息。这个地方有个小问题,那就是通过REST的方式来操作即以xml的方式请求时,返回不了相应的错误信息。
而且上面的方法并没有简化多少,毕竟输出xml或html格式的代码大多都是可重复利用的,因此rails可以做得更好,rails3的确做到了,那就是ActionController::Responder,这个类完美的解决了输出格式的问题。此类文档里面有说明:
引用
# Using Rails default responder, a POST request for creating an object could
# be written as:
#
# def create
# @user = User.new(params[:user])
# flash[:notice] = 'User was successfully created.' if @user.save
# respond_with(@user)
# end
#
# Which is exactly the same as:
#
# def create
# @user = User.new(params[:user])
#
# respond_to do |format|
# if @user.save
# flash[:notice] = 'User was successfully created.'
# format.html { redirect_to(@user) }
# format.xml { render ml => @user, :status => :created, :location => @user }
# else
# format.html { render :action => "new" }
# format.xml { render ml => @user.errors, :status => :unprocessable_entity }
# end
# end
# end
因此创建方法将变得非常的简单:
def create @user = User.new(params[:user]) flash[:notice] = 'User was successfully created.' if @user.save respond_with(@user,:location=>users_url) end
当然这个方法简化了很多,似乎有些神奇,主要过程就是通过respond_with调用ActionController::Responder内部相应的方法,然后。。,然后该干嘛干嘛,就不用管了。rails里面就是有这么多神奇的地方,要明白其中的原理就有些高深了,反正读rails源码要比读java框架的源码难得多,因为封装得太深了。
如果要手动控制跳转的路径可以这样:
def create @user = User.new(params[:user]) flash[:notice] = "User was created successfully." if @user.save respond_with(@user) do |format| format.html { redirect_to users_url } end end
当然更简单的方式是这样的:
def create @user = User.new(params[:user]) flash[:notice] = "User was created successfully." if @user.save respond_with(@user, :location => users_url) end
也就是说redirect_to大概与location的作用差不多。上面这段代码中users_url是一个比较有意思的东西,现在还不能很好解释清楚,虽然没有明确的定义,但它确实是有值的,上面代码的意思表示创建一用户成功后跳转到显示整个users列表的页面,即./users页面。如果不要那个:location=>users_url,则会跳转到显示显示单个user的页面。如果要细究的话,这个respond_with是处理方式还是很复杂的,看着别人用不会有问题,如果稍微变一下就会有问题。主要是用来处理rest的数据交互,不然的话直接用redirect_to,这个方式就不那么让人困惑。
当然respond_with也有:status与:head等属性。比如:
def destroy @product = Product.find(params[:id]) @product.destroy respond_to do |format| format.html { redirect_to(products_url) } format.xml { head :ok } end end
可以写成:
def destroy @product = Product.find(params[:id]) @product.destroy respond_with(@product,:location=>products_url,:head => :ok) end
不过有个问题,在IE7中删除这个功能居然不能用,应该是JS的问题,在Firefox没什么问题,由于开始测试的时候用的时IE7,让本人郁闷了不少时间。
现在想想可能是html5,rails3好像采用了html5的特性,IE7怎么可能支持呢?
这篇文章只是简单的介绍了一下respond_with,如果要想知道这些action的跳转方式及跳转原理的话,那又会是一个相当麻烦的话题,涉及的内容很多。同时在rails3中也有比较大的变化,总之rails的URL跳转封装得太深,虽然用起来很方便,但理解起来却比较困难。
最近发现别看着rails有许多强大的特性,但如果要明白它的实现原理的话,还是非常复杂的,可能比java还要复杂得多,毕竟struts,spring,hibernate实现机制相对来说容易理解一些,java框架的实现总体来说是比较平滑的,而rails则不同,里面有很多激进的方式,跨度很大,而且版本变更也很大,理解起来要困难得多。
参考文章:
http://weblog.rubyonrails.org/2009/8/31/three-reasons-love-responder
http://blog.plataformatec.com.br/2009/08/embracing-rest-with-mind-body-and-soul/
http://ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with/
发表评论
-
ruby生成java文件的工具
2012-05-17 14:41 1605java开发的很多代码都是 ... -
ruby的require加载
2011-11-15 10:18 3266ruby没有像java那种严格的包管理机制,因此引用起来就有些 ... -
windows上使用mysql2
2011-11-14 14:47 1413想在windows上做ruby应该的可能很底,ruby服务器在 ... -
rexml 中增加CDATA
2011-10-14 14:14 2363最近想用ruby写个能生成 ... -
ruby处理未定义的方法
2010-10-08 17:52 1597关于未定义的方法,《ruby编程语言》上面说得比较詳細了,所以 ... -
rails3的删除问题
2010-08-25 00:38 1690Rails 3所做的很大一个改进就是:Unobtrusive ... -
ROR+mysql的中文问题
2010-08-24 15:28 2314环境: os: ubuntu 10.04 ru ... -
Ubuntu上搭建ruby1.9.2 on rails3rc
2010-08-20 13:34 2254linux的分支不同使用起来还是有很多差别的,最近想用一下比较 ... -
windows运行rails3
2010-07-29 11:19 3371虽然rails3的beta版已经出来很久了,但一直没正式版,最 ... -
ruby之enumerator
2010-07-22 00:25 3587由于版本的变更,1.8与1.9在许多地方是不一样的,API变化 ... -
ror中属性值存储的处理
2010-07-19 02:11 1342今天细看了quakewang的那 ... -
一个简单rails应用的开发过程
2010-07-03 16:06 1641基本环境: rails2.3.8 ruby ... -
windows 上使用mongrel
2010-06-30 19:04 2934由于ruby自带了一个webrick的嵌入式服务器,所以以前都 ... -
redmine 一个不错的ror开源项目管理系统
2010-06-30 01:19 2677学了一段时间的ruby,想做点东西,折腾了一下wxruby,但 ... -
ruby的时间与日期
2010-06-04 10:22 4403最近心情稍微好一点,正好现在难得的清闲,于是看了一下ruby的 ... -
ruby的模块
2010-05-20 17:16 1890模块的定义跟类非常相似,只是用module关键字取代class ... -
ruby方法
2010-05-19 15:29 1929没事做,写着玩的。不过ruby的block,proc,闭包或l ... -
ruby 创建基本的类
2010-05-18 11:15 1187由于ruby的语法很多,看 ... -
ruby编程题
2010-05-15 23:43 1868学了一段时间ruby后,又学了段时间python,学了pyth ... -
ruby on rails入门基础
2010-04-10 01:33 3211最近有想学一下ruby on rails的冲动,JAVA这东西 ...
相关推荐
3. **MVC架构**:Rails采用Model-View-Controller架构,书中详细解释了模型(Model)、视图(View)和控制器(Controller)之间的交互与职责。 4. **路由**:Rails的路由系统允许灵活地定义URL到控制器动作的映射,...
- **MVC架构**:Rails采用了经典的Model-View-Controller架构,其中模型负责处理业务逻辑,视图负责显示界面,控制器则作为二者之间的桥梁。 - **Active Record**:这是Rails提供的ORM(对象关系映射)解决方案,...
3. **模块化**:Rails 3将框架分解成多个可独立使用的组件,如ActiveRecord、ActionController等,这使得开发者可以根据项目需求选择性地使用这些组件。 4. **与Ruby 1.9的兼容性**:Rails 3全面支持Ruby 1.9,这...
使用 Rails 4 的简单聊天应用程序 - ActionController::Live 应用组件: 1 . 使用 Rails 4 ActionController::Live 的聊天应用程序 2 . 基本 LDAP 身份验证 3 . Redis 服务器集成 4 . 彪马服务器 1 . Rails 4 ...
3. **Action Controller**:负责处理HTTP请求并调用模型来执行业务逻辑,然后将结果传递给视图进行渲染。 4. **Action View**:用于生成HTTP响应的视图层,可以使用ERB(嵌入式Ruby)或其他模板引擎来创建HTML输出。...
此外,Rails还内置了许多实用功能,如ActiveRecord(用于数据库交互)、Action View(用于页面渲染)和Action Controller(用于处理用户请求),这些都使得开发者能够快速构建出功能丰富的Web应用程序。 #### 2. ...
2. **ActionController**:负责处理HTTP请求并生成HTTP响应。控制器是MVC架构中的C,它连接模型和视图,处理用户输入,调用模型进行业务逻辑处理,并将结果传递给视图进行展示。 3. **ActionView**:视图部分用于...
9. **兼容性**:MongoModel兼容Rails 3,意味着它可以与其他Rails组件如ActionController和ActiveSupport无缝协作,提供完整的Web应用开发体验。 在"spohlenz-mongomodel-2c4db19"这个压缩包中,很可能是MongoModel...
2. **ActionController**:负责处理HTTP请求,并将数据转发给相应的模型和视图。它管理着应用的业务逻辑和控制流程。 3. **ActionView**:负责生成HTML或其他类型的响应,通常与模板系统一起工作,将数据以用户友好...
6. **ActionPack**:包含ActionController和ActionView,提供了处理HTTP请求和响应的一系列工具。 7. **ActiveSupport**:这是一个工具库,包含了各种实用的类和模块,如时间处理、字符串操作和集合操作等。Rails ...
在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...
1. Rails 3.0: Rails 3是重大升级,引入了ActionController::Metal,这是一个轻量级的控制器,用于提高性能。同时,它引入了多路由引擎支持,如Rack中间件,使得与其他Web服务器的集成更加容易。此外,ActiveRecord...
Action Controller是Rails中处理HTTP请求的部分。它负责接收请求,调用模型来处理业务逻辑,然后将结果传递给视图进行渲染。控制器方法可以设置HTTP响应的状态码,以及返回给客户端的数据。 **5. Views和Helper方法...
Rails 作为 Ruby 的主要应用框架之一,两者密切相关。 在压缩包的文件名称列表中,只有一个条目 "rails",这可能意味着压缩包内包含了 Rails 框架的核心文件,如 gemspec 文件、库文件、初始化脚本等。开发者可以...
在本项目"Ruby-Rails实战之B2C商城开发"中,我们将深入探索使用Ruby on Rails这一强大的Web开发框架来构建一个完整的B2C(Business-to-Consumer)在线商城。Rails是Ruby语言的一个核心框架,以其MVC(Model-View-...
此外,它还提供了大量的内置功能和库,如ActiveRecord用于ORM(对象关系映射),ActionController处理HTTP请求,以及ActionView生成响应。 SQLite是一个轻量级的嵌入式数据库,常用于Rails开发中的开发和测试环境。...
- **配置**:在`config/routes.rb`文件中添加新的路由规则,例如`get 'new_route' => 'controller#action'`。 - **效果**:这将在应用中增加一个新的URL路径,指向指定控制器的动作。 #### 七、渲染视图 - **方法*...
2. **ActionController**:处理HTTP请求,并调用模型来执行业务逻辑,然后将结果传递给视图进行渲染。控制器包含了各种助手方法,用于辅助处理请求和响应。 3. **ActionView**:负责生成HTTP响应的视图部分,可以是...
ActionController是Rails中的一个关键组件,它处理HTTP请求,调用控制器方法,并返回响应。控制器方法可以操作模型,处理数据,然后选择适当的视图来呈现结果。对于API应用,通常返回JSON或XML格式的数据。 在Rails...