在Rails3中使用send方法时如何使before_filter运行?

时间:2010-12-29 09:23:39

标签: ruby ruby-on-rails-3

我的foo控制器定义如下:

class FooController < ApplicationController
  before_filter :authenticate, :only => :some_action
  def show
    send(some_action)
  end

  def some_action
  end

  private
  def authenticate
    # redirect user if not authenticated
  end
end

鉴于我没有登录,当我直接导航到some_action操作时,我被重定向到首页。然而,当我导航到演出动作时,我不是。 当我通过send调用操作时,before_filter不会运行。

目前,我的解决方法是直接从我的authenticate操作中致电some_action

有关为什么不通过send调用before_filter以及如何修复它的任何想法?这是通过控制器调用send的预期行为吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

send是一种红宝石元编程方法。你应该只在特殊情况下使用它,而不是一直使用它。

答案 1 :(得分:1)

这个怎么样?

class FooController < ApplicationController
  before_filter :authenticate, :only => [:show, :some_action]

  def show
    ...
  end

  def some_action
    ...
  end
end