ruby - Sinatra:过滤器排序之前

标签 ruby sinatra

我想定义一个全局前置过滤器,它将在每个请求之前运行,为所有方法设置一些实例变量。

我已经设置了过滤器,还在过滤器之前设置了一些特定的路由。似乎我的路由特定过滤器在我的全局过滤器之前执行,因此崩溃,因为尚未设置预期的实例变量。

有没有办法指定处理 before 过滤器的顺序?

最佳答案

这对我有用,适用于 Sinatra 1.3.2。

before do
  @filter = [] << 'everything'
end
before '/filter' do
  @filter << 'specific'
end
get '/filter' do
  @filter.inspect
end

这给了我 ["everything", "specific"] 这正是我所期望的。有没有可能你没有先于所有其他过滤器的 catch-all 过滤器?

在 Sinatra 中,路由是按从上到下的顺序进行评估的,而不是根据它们的匹配程度。因此,如果您在 catch-all 过滤器之前有特定过滤器,它将首先评估这些过滤器,如下所示:

before '/filter' do
  @filter = [] << 'specific'
end
before do
  @filter << 'everything'
end
get '/filter' do
  @filter.inspect
end    # => ["specific", "everything"]

关于ruby - Sinatra:过滤器排序之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459397/

相关文章:

javascript - Twitter Bootstrap - 通过单击链接显示模态

Ruby 正则表达式 ‘backslash R’ 又名 ‘\R’ 模式

ruby - 如何在 Ruby 中将关键字参数设置为默认为未定义

ruby - Sinatra 服务器响应超时

ruby - 严格的正则表达式路由

javascript - 如何序列化来自非表单元素的数据并使其可从 params[ :model]

ruby - 使用 Savon 2 发送原始 XML

ruby-on-rails - 如何将属性作为参数传递给在类上调用的方法?

ruby - 使用正则表达式返回字符串的前缀,其中剥离的字符串有时包含 '/'

ruby - Cookie 数据大小超过 4K - 但其 'only' 1100 字节已加密