回答
还没有尝试过,但是这可能工作:
[:before, :after, :around].each {|type| reset_callbacks(type)}
这肯定是里面的Rails腹部深黑客,你会过得更好用手工指定的回调,但是下面一行将做的工作:
eval %[skip_filter #{_process_action_callbacks.select { |c|
[:before, :after, :around].include? c.kind }.collect{|c|
c.filter.inspect}.join(", ")
}]
您还可以添加:only => :index
等修改的EVAL就在结束]
之前,在需要时进一步修改呼叫。
试试这个
skip_filter *_process_action_callbacks.map(&:filter)
方法_process_action_callbacks
应该返回CallbackChain情况下,这是一个数组Callback小号 而且,由于回调#过滤得到回调的名字,这个工作:
before_filter :setup
_process_action_callbacks.map(&:filter) #=> [:setup]
需要为此参数提供参数:'skip_filter(* _ process_action_callbacks.map(&:filter)) – 2011-07-13 01:30:22
修复了基于@ XavierShay的评论的代码 – 2013-11-05 21:23:16
如果要指定:仅限或:除skip_filter外,请使用以下内容:
skip_filter(:only => [:method1, :method2], *_process_action_callbacks.map(&:filter))
Xavier Shay把我放在了正确的方向,但后来我挣扎了一下,弄清楚了我必须说的:只有在要跳过的过滤器列表之前!
编辑:上面的解决方案是针对RUby 1.8.7。对于Ruby 1.9的你会怎么做:
skip_filter(*_process_action_callbacks.map(&:filter), :only => [:method1, :method2])
需要跳过所有过滤器可能是由从定制的ApplicationController继承引起的。
class ApplicationController < ActionController::Base
# defines multiple `before_filter`s common to most controllers
class SomeController < ApplicationController
# this controller may be fine with inheriting all filters
class AnotherController < ApplicationController
# but this one not!
在我的示例场景,而不是去除AnotherController
的before_filter
S,就让它从ActionController::Base
继承。
- 1. 轨道4:跳过回调
- 2. 轨JSON过滤器“:只有”
- 3. 轨道范围过滤
- 4. 轨道4 ActiveRecord的过滤器
- 5. 过滤JSON在导轨3
- 6. 使用角度过滤器过滤轨道输出
- 7. HBase扫描过滤器 - 跳过没有所需列的行
- 8. 在邀请轨道上跳过验证
- 9. 过滤器过滤列表在Python 3
- 10. 轨道:凡是有过滤器类别至少一个文章
- 11. 过滤器不跳过注册页面
- 12. JSF过滤器跳过一些文件
- 13. Rspec:跳过排除过滤器
- 14. 跳过after_filter在轨
- 15. 使用MetaSearch按日期过滤轨道
- 16. 过滤lambda错误的轨道参数
- 17. 过滤数据库输出轨道
- 18. 过滤belongs_to的轨道中的项目
- 19. 轨道中的协作过滤
- 20. 过滤器方法摆脱过滤器后的所有项目
- 21. 的base64通过纸夹在轨道3
- 22. 轨道3的has_many通过HAS_ONE
- 23. 跳过/过滤表格行
- 24. 减少轨道控制器中的作用域过滤器
- 25. 用于控制器的轨道通用过滤器
- 26. 调试器跳过所有地方
- 27. 查询3个表上有过滤器
- 28. 管道和过滤器
- 29. Angular2:显示空的过滤器管道的所有内容
- 30. 有过滤器
'reset_callbacks'将完全删除整个控制器的回调,并且不允许使用':except'或':only'关键字。如果这是可以接受的,它比我的代码更好,更向前兼容。 – Laas 2011-05-19 09:24:11