提供回应后立即从`call(env)`返回

时间:2018-12-16 13:26:01

标签: ruby

我有一个Rack Web服务器应用程序,可以在call(env)中验证提供的HTTP查询字符串,并在验证失败的情况下立即以适当的erb返回不同的响应。

我正在调用以下方法来提供响应:

def respond(http_status, http_headers, html_body = '')
  # Provide HTTP response
  html_body = yield if block_given?
  [http_status, http_headers, [html_body]]
end
我从网上搜集到的

然后我从respond(...)方法内部的不同点调用call(env),就像这样:

def call(env)
  case blah
    when '/'
      if validation_a_fails
        respond(invalid_a)
      else
        set up a variable for later use...
      end
      if validation_b_fails
        respond(invalid_b)
      else
        set up another variable for later use...
      end
      if validation_c_fails
        respond(invalid_c)
      else
        set up something else for later use...
      end
    else # not root url
      respond(404_situation)
    end
  end
end

我希望对respond(invalid_a)的调用将立即退出该调用方法。但是,事实并非如此。而是执行其余的call方法。

如何获取respond(...)以立即返回到调用浏览器?

1 个答案:

答案 0 :(得分:1)

if validation_a_fails
  return respond(invalid_a)
else

在您的情况下,您不能省略return,因为您有多个if-else,因此可以通过它们。