我试图在 session 中保存以前的 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)
所以我需要知道当没有以前的 url 时如何忽略它。
最佳答案
好吧,我将分享一个小技巧,我在处理 null 或空对象/变量时经常使用 ruby/rails。
def save_my_previous_url
if request.referer.present?
session[:my_previouse_url] = URI( (request.referer || "") ).path
else
session[:my_previouse_url] = URI( (request.referer || "") ).path
end
end
解释: 这里的技术是假设在最坏的情况下,我们从方法调用 request.referer 返回 nil。因此,每当您将 null 值传递给函数并且知道下一个方法调用将失败时,请将此代码段作为参数传递:
( @variable || "whatever_value_needed" )
#alternatively:
( method_call || "whatever_value_needed" )
在这种情况下,“whatever_value_needed”应该是一个空字符串。
此技术之所以有效,是因为 request.referer 方法调用首先被评估为 nil,更具体地说是 bool 值 false。然后,由于“或” ||运算符,计算第二个操作数,在本例中为“”。 URI 对象实例化然后顺利运行,因为它接受一个空字符串作为参数,并且对这个新对象的所有方法调用都将起作用(...不会抛出异常)。
无论您遇到此问题,都可以随意使用此技术。如果对您有帮助,请点赞!
关于ruby-on-rails - 直接访问页面时忽略上一个 URL 的 URI(request.referer).path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148470/