- 浏览: 455262 次
- 性别:
- 来自: 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 1574java开发的很多代码都是 ... -
ruby的require加载
2011-11-15 10:18 3233ruby没有像java那种严格的包管理机制,因此引用起来就有些 ... -
windows上使用mysql2
2011-11-14 14:47 1377想在windows上做ruby应该的可能很底,ruby服务器在 ... -
rexml 中增加CDATA
2011-10-14 14:14 2334最近想用ruby写个能生成 ... -
ruby处理未定义的方法
2010-10-08 17:52 1564关于未定义的方法,《ruby编程语言》上面说得比较詳細了,所以 ... -
rails3的删除问题
2010-08-25 00:38 1648Rails 3所做的很大一个改进就是:Unobtrusive ... -
ROR+mysql的中文问题
2010-08-24 15:28 2283环境: os: ubuntu 10.04 ru ... -
Ubuntu上搭建ruby1.9.2 on rails3rc
2010-08-20 13:34 2232linux的分支不同使用起来还是有很多差别的,最近想用一下比较 ... -
windows运行rails3
2010-07-29 11:19 3332虽然rails3的beta版已经出来很久了,但一直没正式版,最 ... -
ruby之enumerator
2010-07-22 00:25 3555由于版本的变更,1.8与1.9在许多地方是不一样的,API变化 ... -
ror中属性值存储的处理
2010-07-19 02:11 1309今天细看了quakewang的那 ... -
一个简单rails应用的开发过程
2010-07-03 16:06 1606基本环境: rails2.3.8 ruby ... -
windows 上使用mongrel
2010-06-30 19:04 2899由于ruby自带了一个webrick的嵌入式服务器,所以以前都 ... -
redmine 一个不错的ror开源项目管理系统
2010-06-30 01:19 2643学了一段时间的ruby,想做点东西,折腾了一下wxruby,但 ... -
ruby的时间与日期
2010-06-04 10:22 4363最近心情稍微好一点,正好现在难得的清闲,于是看了一下ruby的 ... -
ruby的模块
2010-05-20 17:16 1854模块的定义跟类非常相似,只是用module关键字取代class ... -
ruby方法
2010-05-19 15:29 1903没事做,写着玩的。不过ruby的block,proc,闭包或l ... -
ruby 创建基本的类
2010-05-18 11:15 1152由于ruby的语法很多,看 ... -
ruby编程题
2010-05-15 23:43 1819学了一段时间ruby后,又学了段时间python,学了pyth ... -
ruby on rails入门基础
2010-04-10 01:33 3178最近有想学一下ruby on rails的冲动,JAVA这东西 ...
相关推荐
使用 Rails 4 的简单聊天应用程序 - ActionController::Live 应用组件: 1 . 使用 Rails 4 ActionController::Live 的聊天应用程序 2 . 基本 LDAP 身份验证 3 . Redis 服务器集成 4 . 彪马服务器 1 . Rails 4 ...
第22章 ActionController和Rails 345 22.1 Action方法 345 22.2 Cookie和Session 354 22.3 Flash——Action之间的通信 364 22.4 过滤器与校验 366 22.5 缓存初接触 372 22.6 GET请求的问题 378 第23章 Action View ...
用于Rails 3+的验证器和生成器 安装 将此行添加到您的应用程序的Gemfile中: gem 'json_schema_rails' 然后执行: $ bundle 或将其自己安装为: $ gem install json_schema_rails 用法 生成架构文件 您可以...
:所有可以通过普通 stdlib MiniTest直接测试的东西 : 主作弊控制器 :使用ActionController::TestCase功能的控制器特定测试 :主作弊视图 : 主要作弊模型 : ActiveRecord测试。 这些可以用unit/main ,但由于它们...
第二种是将其用作Rails ActionController过滤器。 根据您使用的框架,一个或两个选项可能可供您使用。 如果您对记录RSpec测试感兴趣,则filter选项将捕获控制器规范和请求规范的流量,而middleware选项仅捕获请求...
祖尔分别为ActiveRecord和ActionController提供上下文授权和访问控制,以及一些方便的Rails附加功能(如易于使用的生成器)。特征Zuul为ActiveRecord提供了一种非常灵活的授权解决方案,其中可以在各种上下文中分配...
在元编程的壮举中,我重新创建了 ActiveRecord 和 ActionController 的核心功能,它们分别是 Ruby on Rails 模型和控制器的基类。 使用我的精简版 Rails,您可以创建一个带有关联、Flash 甚至用户身份验证的基本网站...
OmniAuth-Rails CSRF保护该gem通过实现直接使用Rails的ActionController::RequestForgeryProtection代码的CSRF令牌验证程序,缓解了 (在将OmniAuth gem与Ruby on Rails应用程序结合使用时在请求阶段进行跨站点请求...
action_args Rails的控制器动作参数参数化程序这是什么? action_args是一个Rails插件,它扩展了控制器的操作方法,使您可以在任何操作的方法定义中指定感兴趣的参数。 -简而言之,这使您的Rails控制器变得轻浮。...
我们还加入了ActionController请求周期,以警告开发人员请求是否已在系统中留下未提交的更改。 支持 从3.1.0版本开始支持Rails 4 如何测试 从acs_as_account gem运行Cucumber功能,只需执行 耙功能:create_...
:warning: 您正在查看此gem的master分支的自述文件。 请参阅最新 。influxdb-rails 自动检测Ruby on Rails应用程序...动作控制器报告的ActiveSupport工具挂钩: process_action.action_controller 报告值: controller
可验证(支持ActiveRecord和Mongoid) (支持Rails,Rails API和ActionController::Metal ) 如果您想进一步了解宝石的工作原理,请继续阅读! 概述之后,我们将执行以下两个步骤。总览简单令牌身份验证提供了从...
自动::会话::超时在Rails应用程序中提供自动会话超时。 非常容易安装和配置。... ActionController :: Base auto_session_timeout 1 . hourend 这将使用1个小时的全局超时。 gem假定您的身份验证提供程序具有#
ActionController :: Base token_authentication_for :user_account end 辅助方法 检查用户是否已登录并获取当前已登录用户,可以使用以下类似 Devise 的帮助程序: user_account_signed_in? current_user_...
注意,该宝石适用于Rails,其中ApplicationController继承了ActiveController :: Base。 ActiveController :: API对Rails应用程序的支持即将推出。 用法 运行Rails服务器或运行rspec并检查log/action_tracer.log 。...
受Pundit启发的简单轻量级的Rails授权库。 Banken提供了一组帮助程序,用于限制允许给定用户访问哪些资源... ActionController :: Base include Banken protect_from_forgery end (可选)您可以运行生成器,这将为
语言引擎 language_engine 是一个用于语言的 rails 引擎: 控制器帮手视图和资产没有定义,因为我们认为每个人都想在... ActionController :: Base protect_from_forgery helper LanguageEngine :: Engine . helpers
ActionController帮助程序将过滤器参数从ActionView表单传递到基于ActiveRecord的模型,并将匹配的记录从ActiveRecord返回到ActionView。 表单助手可轻松构建强大的搜索和过滤表单。 通过AJAX在更改时自动提交过滤...
对于包罗万象的路线的用户如果(且仅当)您已经在您的应用程序中捕获了所有路线,例如get '*path' => 'your_controller#your_action' ,您可以在捕获所有路线之前手动将 rails_db_info 添加到您的路线 (config/...