我正在尝试在会话中保存以前的URL,我目前有以下代码:
after_filter "save_my_previous_url", only: [:renderForm, :renderQuote]
def save_my_previous_url
if URI(request.referer).path
session[:my_previouse_url] = URI(request.referer).path
else
session[:my_previouse_url] = URI(request.referer).path
end
end
当你从一个页面,到表单,然后到感谢页面时,它可以工作,但是如果你直接进入表单而不是点击链接,我会得到这个错误:
bad argument (expected URI object or URI string)
因此,我需要一些如何忽略这一点时,没有以前的网址。
2条答案
按热度按时间omhiaaxx1#
你需要确保你同时处理nil引用者和URL不能解析的引用者(例如:像 * http://x.com?utm_term=a|b * 这样的URL--“|“导致解析失败,至少在某些版本的RUB中是这样)。
这段代码(或类似的代码)对我来说很有用:
vcirk6k62#
好吧,我将分享一个我在ruby/rails中处理null或空对象/变量时经常使用的小技巧。
**解释:**这里的技术是假设在最坏的情况下,我们从方法调用request. referer返回nil。因此,每当你向函数传递一个null值,并且知道下一个方法调用将爆炸时,将下面的代码片段作为参数传递:
在这种情况下,“whatever_value_needed”应该是一个空字符串。
这种技术之所以有效,是因为request.referer方法调用首先被计算为nil,更确切地说是布尔值false。然后,由于“或”||运算符,则计算第二个操作数,在本例中为“”。然后URI对象示例化顺利运行,因为它接受一个空字符串作为参数,并且对这个新对象的所有方法调用都将工作(...不会抛出异常)。