Rails 3做skip_before_filter的方法,:仅限

时间:2011-07-23 13:06:25

标签: ruby-on-rails ruby before-filter

在rails 2.8中,我们可以像这样编写skip_before_filter

skip_before_filter :require_login, :only => [:create,:new,:accept]

这意味着,我想将过滤器require_login仅应用于这些操作[:create,:new,:accept],并跳过其他人的过滤器。

但看起来,这种方式在rails 3中是deprecated。并添加了新的skip_filter。我试过这个

 skip_filter :require_login, :only => [:create,:new,:accept]

但它不起作用,所以我怎么能在rails 3中这样做。

2 个答案:

答案 0 :(得分:15)

这是对skip_before_filter的错误使用。

要将过滤器require_login专门应用于操作[:create,:new,:accept],并跳过其他人的过滤器,您必须先应用过滤器:

before_filter :require_login

然后,您必须告诉rails跳过此过滤器除了以执行“创建,新建和接受”操作。

skip_before_filter :require_login, :except => [:create,:new,:accept]

您还可以使用skip_filter,这可以包含before_filterafter_filteraround_filter过滤器:

skip_filter :require_login, :except => [:create,:new,:accept]

参考:Rails 3.2 guide

在Rails 4.0中,等效方法是:before_action和:skip_before_action。

参考:Rails 4.0 guide

答案 1 :(得分:11)

  • skip_before_filter尚未弃用,see source

  • 您按预期使用它。

那你怎么推断它不能正常工作?