- 浏览: 455259 次
- 性别:
- 来自: 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总结
Rails 3所做的很大一个改进就是:Unobtrusive JavaScript(非侵入式的JavaScript),以实现对HTML和JavaScript代码的分离。比如:
将转换成:
不再有多余的js代码,不过那个data-是html5的元素,因此这段代码要跑起来还是有点困难的。在windows上,点击destroy会跳到show的action中去。引用:
The reason that the link isn’t working is that we don’t have the relevant JavaScript files referenced in the head section of the page so the link will behave as a standard link and perform a GET request as there’s nothing telling it to do otherwise.
也就是说浏览器把它当做get方法处理了。在linux ubuntu下,虽然执行了delete操作,但是没有authenticity_token元素,会被认为是CSRF攻击,因此会抛出InvalidAuthenticityToken异常。这个问题让我想起过加skip_before_filter :verify_authenticity_token,但是这明显不是好的方式,也试着改一下request.forgery_whitelisted?方法,虽然也能解决问题,但更加的不好。无意间在网上看见了一种处理方式,这种方式应该是标准的解决方案了吧。
解决方式很简单,在layouts目录下的模板文件的头部加上:
一般第一句是有的,只是缺少第二句。看看csrf_meta_tag源码:
相应的html代码与下面类似:
这段代码主要解决的就是csrf的问题。在原来的rails2中,通过js创建一大段代码来提交删除操作,提交方式为post,其中就有这个隐藏字段,所以原因是可能没有这个不能识别到delete操作吧。
虽然这个问题就这样解决了,但有些困惑的是,在windows下与linux居然表现出不同的行为,用的firefox都是3.6.8的,rails3rc版本也是一样的,只有ruby一个是187,一个是192,难道对ruby解析器有关?
后记(2010.9.2),最近突然相起,分页的时候删除操作也应该进行相应的处理,如在第三页删除某条记录,那么删除之后也应该回到第3页。这个问题分页插件并没有进行相应的处理,因此只能自己做。
在rails3中,本人使用的是:
这个插件非常使用简单,功能强大,比我见过的所有java分页插件都好。怎么使用可参照官网,很简单的。下面讲一下怎么处理删除之后又回到原来的那一页。
仔细观察了一下,分页就是通过page参数实现的,只要在删除时将page参数传过去,应该就可以解决问题。于是删除时加上page参数:
这样删除链接就会加上page=..多少的参数了。但是这样还没完,因为删除之后会进行查询操作。上面的操作只是把page参数传进destroy方法了,但是并没有传送到index方法去。
由于本人对rails的了解还比較浅,因此简单一点,再传一次。
试一下,respond_with不知道该怎么传参数过去,文档上也没说,网上也没找到这么用的,因此只能用redirect_to了。
经过上面两步以后,删除回到原来的分页位置就可以解决了。
看了下文档,原来还有:back这个东西,多谢提醒!
这样的话可以很简单了:
<%= link_to "Destroy", @product, :confirm => "Are you sure?", :method => :delete %>
将转换成:
<a href="/products/8" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>
不再有多余的js代码,不过那个data-是html5的元素,因此这段代码要跑起来还是有点困难的。在windows上,点击destroy会跳到show的action中去。引用:
引用
The reason that the link isn’t working is that we don’t have the relevant JavaScript files referenced in the head section of the page so the link will behave as a standard link and perform a GET request as there’s nothing telling it to do otherwise.
也就是说浏览器把它当做get方法处理了。在linux ubuntu下,虽然执行了delete操作,但是没有authenticity_token元素,会被认为是CSRF攻击,因此会抛出InvalidAuthenticityToken异常。这个问题让我想起过加skip_before_filter :verify_authenticity_token,但是这明显不是好的方式,也试着改一下request.forgery_whitelisted?方法,虽然也能解决问题,但更加的不好。无意间在网上看见了一种处理方式,这种方式应该是标准的解决方案了吧。
解决方式很简单,在layouts目录下的模板文件的头部加上:
<%= javascript_include_tag :defaults %> <%= csrf_meta_tag %>
一般第一句是有的,只是缺少第二句。看看csrf_meta_tag源码:
def csrf_meta_tag if protect_against_forgery? %(<meta name="csrf-param" content="#{Rack::Utils.escape_html(request_forgery_protection_token)}"/>\n<meta name="csrf-token" content="#{Rack::Utils.escape_html(form_authenticity_token)}"/>).html_safe end end
相应的html代码与下面类似:
<meta name="csrf-param" content="authenticity_token"/> <meta name="csrf-token" content="WO8dau2vScU/ad3JKLh2jRdSm7N8QEdNfX3ggGawxOE="/>
这段代码主要解决的就是csrf的问题。在原来的rails2中,通过js创建一大段代码来提交删除操作,提交方式为post,其中就有这个隐藏字段,所以原因是可能没有这个不能识别到delete操作吧。
虽然这个问题就这样解决了,但有些困惑的是,在windows下与linux居然表现出不同的行为,用的firefox都是3.6.8的,rails3rc版本也是一样的,只有ruby一个是187,一个是192,难道对ruby解析器有关?
后记(2010.9.2),最近突然相起,分页的时候删除操作也应该进行相应的处理,如在第三页删除某条记录,那么删除之后也应该回到第3页。这个问题分页插件并没有进行相应的处理,因此只能自己做。
在rails3中,本人使用的是:
gem "will_paginate", "3.0.pre2"
这个插件非常使用简单,功能强大,比我见过的所有java分页插件都好。怎么使用可参照官网,很简单的。下面讲一下怎么处理删除之后又回到原来的那一页。
仔细观察了一下,分页就是通过page参数实现的,只要在删除时将page参数传过去,应该就可以解决问题。于是删除时加上page参数:
<%= link_to 'Destroy', user_path(user,:page=>params[:page]),:confirm => 'Are you sure?', :method => :delete %>
这样删除链接就会加上page=..多少的参数了。但是这样还没完,因为删除之后会进行查询操作。上面的操作只是把page参数传进destroy方法了,但是并没有传送到index方法去。
由于本人对rails的了解还比較浅,因此简单一点,再传一次。
respond_with(@user) do |format| format.html { redirect_to(:action=>"index",:page=>params[:page]) } end
试一下,respond_with不知道该怎么传参数过去,文档上也没说,网上也没找到这么用的,因此只能用redirect_to了。
经过上面两步以后,删除回到原来的分页位置就可以解决了。
评论
6 楼
be_a_coder
2010-12-20
非常赞,最近正在学习rails其中就遇到了这个问题,
这些问题不知道的时候还真是摸不着头脑。
多谢老兄分享
这些问题不知道的时候还真是摸不着头脑。
多谢老兄分享
5 楼
charm
2010-11-27
删除跟其它的都一样,respond_with @user, :location => **_path
4 楼
solacky
2010-11-10
我记得在IE中用Link_to删除还是会有问题,在FF 里没事。
逼急了,直接用Button_to。
逼急了,直接用Button_to。
3 楼
下一站,火星
2010-10-01
这种删除一般是利用ujs实现 "ajax"删除
2 楼
fansofjava
2010-09-28
andyxl0315 写道
最近突然相起,分页的时候删除操作也应该进行相应的处理,如在第三页删除某条记录,那么删除之后也应该回到第3页。这个问题分页插件并没有进行相应的处理,因此只能自己做。
在rails3中,本人使用的是:
===========================================引用========================
如果当前是第3页 。
第三页只有1条数据,现在把数据删除了,跳转到第三页什么都看不到。
redirect_to :back 等价于
redirect_to(:action=>"index",:page=>params[:page])
在rails3中,本人使用的是:
===========================================引用========================
如果当前是第3页 。
第三页只有1条数据,现在把数据删除了,跳转到第三页什么都看不到。
redirect_to :back 等价于
redirect_to(:action=>"index",:page=>params[:page])
看了下文档,原来还有:back这个东西,多谢提醒!
这样的话可以很简单了:
def destroy @user = User.find(params[:id]) @user.destroy respond_with(@user,:location=>:back) end
1 楼
javy_liu
2010-09-28
使用 csrf_meta_tag 以后能解决ie 浏览器的问题么?
现在有80%的人还在使用ie6呢!
现在有80%的人还在使用ie6呢!
发表评论
-
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编程语言》上面说得比较詳細了,所以 ... -
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的分支不同使用起来还是有很多差别的,最近想用一下比较 ... -
rails3之ActionController
2010-07-29 21:36 3621rails3中有许多变化,现 ... -
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这东西 ...
相关推荐
Ruby.on.Rails.Tutorial,Learn.Web.Development.with.Rails,Third.Edition-中文版 文字版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
Agile Web Development with Rails 5 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书...
Ruby on Rails 4.0 Guide 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
本章详细介绍Rails数据持久化技术ActiveRecord的使用,包括ORM与ActiveRecord的简介、建立数据表的映射、执行动态查询、插入数据、删除数据、表之间的关联,以及数据有效性验证等。 第11章 MVC的控制器层。本章...
dao42 / rails-template dao42 / rails-template支持最新的rails 6.0.0项目设置 也许是高级Rails开发人员的最佳,最新和最快的Rails模板。 这可能是您新的Rails项目的... dao42/rails-template使用webpacker并删除a
batch_request_api, 在 Rails 应用程序上,提供批处理操作的ruby ...更新和删除的Rails 中间件 gem 。可以定制的中间件批量创建。更新和删除记录或者并行删除记录安装将此行添加到你的应用程序的Gemfile中:gem 'ba
Ruby on Rails的Kindeditor Kindeditor是所见即所得的... 注意:Rails 5.1已从默认设置中删除了对jQuery的依赖,但是rails_kindeditor需要'jquery-rails'。 运行“捆绑”命令。 bundle 运行安装生成器: rails g
Rails, Angular, Postgres, and Bootstrap(2nd) 英文epub 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Rails 5 Test Prescriptions Build a Healthy Codebase 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
ActsAsParanoid - ActiveRecord插件允许你隐藏和恢复记录没有真正删除它们
将此gem添加到您的Gemfile中,删除config/initializers/secret_token.rb并配置config/secrets.yml secrets.yml, 。 变更日志 1.0.2 添加对Rails 3.2.x的支持 在配置开始之前包括实例方法,以便在环境配置中可用 ...
除了这两个,http协议还知道 put和 delete 方法,这两个方法告诉服务器创建或者删除一个WEB的资源. 这个教程的目的,就是扩展开发人员的视线,去了解http协议的 put 和 delete 方法.我们常说的 REST 这个术语,精华就是 ...
Rails, Angular, Postgres, and Bootstrap(2nd) 英文无水印pdf 第2版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,...
##递归删除当您在 Rails 中调用 Record.destroy 时,它会实例化其所有关联(即 :dependent => :destroy)并在每个关联上调用 destroy。 这是一个 N + 1,如果将关联设置为 :dependent => :delete_all,则可以删除...
Learn Rails 5.2 Accelerated Web Development with Ruby on Rails 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系...
您的模型将使用唯一的短哈希,例如“ yLA6m0oM”,“ 5bAyD0LO”和“ wz3MZ49l”,而不是使用诸如1、2、3之类的序号的模型。 数据库仍然会使用整数,因此可以随时添加或删除此gem。 重要信息:如果您需要从1.0之前...
actionpack-action_caching Action Pack的操作缓存(从Rails 4.0的核心中删除)。 安装将此行添加到应用程序的Gemfile中:gem'actionpack-action_caching',然后执行:$ bundle O actionpack-action_caching Action ...
在您阅读此消息后的 42 微秒到 2-3 周内,此角色将从星系和github 中的任何地方删除。什么是ansible-rails? 这是一个部署Rails应用程序的作用。它解决了什么问题,为什么有用? 我做 rails 开发人员已经一年多了,...
Rails Api基地 介绍 该项目的目标是: 一个讨论Rails设置和开发的api示例。 从其开始项目的基本模板。 规格摘要: RESTful API。 api版本。... git clone git://github....删除所