我有一个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(...)
以立即返回到调用浏览器?
答案 0 :(得分:1)
if validation_a_fails
return respond(invalid_a)
else
在您的情况下,您不能省略return
,因为您有多个if-else
,因此可以通过它们。