ruby-on-rails before_filter和respond_to格式

qyuhtwio  于 2023-04-08  发布在  Ruby
关注(0)|答案(3)|浏览(122)

在我的Rails应用程序的控制器中,我可以这样做:

before_filter :login_required, :except => :index

但是我想应用过滤器,不仅基于动作名称,还基于请求的格式。换句话说,我想做这样的事情:

before_filter :login_required, :except => {:action => :index, :format => :js}

这可能吗?

62lalag4

62lalag41#

你需要自己做一点。试着从这个开始。

before_filter :login_required, :except => [:index]

 before_filter(:only => :index) do |controller|
   login_required unless controller.request.format.js?
 end
jv2fixgn

jv2fixgn2#

记住,你也可以将lambda提取到一个方法中。这有助于提高可读性。它还可以更容易地在多个过滤器上使用相同的检查。

before_filter :login_required, except: :index, unless: :js_request?

private

def js_request?
  request.format.js?
end
dkqlctbz

dkqlctbz3#

另一种方法,我认为比公认的答案更简洁,是使用带有lambda的ifunless选项。我只是喜欢将方法名称作为符号列出,以便与其他控制器过滤器一起标准化。这在Rails 3和更高版本中有效。

before_filter :login_required, except: :index,
  unless: ->(controller) { controller.request.format.js? }

相关问题