如何判断请求类型并验证对应条件执行语句的写法正确性?
写法评估与优化建议
你原有的逻辑是成立的,但有2个可优化的点,能大幅降低出错概率:
- 直接用框架内置的请求方法判断谓词更稳妥:如果你用的是Rails/Rack系框架,
request对象自带get?方法,直接返回布尔值,不需要手动比对字符串,完全避免大小写不匹配、拼写错误的问题。原写法中如果出现请求方法返回小写get的特殊场景,会导致判断失效,用内置方法就没有这个隐患。 - 正则匹配的变量要做转义:你原有代码中
timeout_path如果包含.、*这类正则特殊字符,会导致匹配逻辑不符合预期,建议用Regexp.escape对变量做转义处理。
优化后代码
def save_path if request.get? # 避免保存超时跳转路径,否则用户无法正常进入登录流程 session[:desired_path] = request.url unless request.url =~ /#{Regexp.escape(timeout_path)}$/ end end
如果你的运行环境没有提供request.get?这类内置方法,也可以把原有的字符串判断调整为大小写不敏感的写法,进一步兼容异常场景:
def save_path if request.method.upcase == 'GET' session[:desired_path] = request.url unless request.url =~ /#{Regexp.escape(timeout_path)}$/ end end
内容的提问来源于stack exchange,提问作者Pouya
相关产品推荐
相关产品推荐

