【问题标题】:If referer = "/search", do X, else do Y: "bad argument (expected URI object or URI string)"If referer = "/search", do X, else do Y: "bad argument (expected URI object or URI string)"
【发布时间】:2014-12-15 20:37:07
【问题描述】:

我对 Ruby 和 URI 有疑问。我想测试我的推荐人:

  • 如果referer包含“/search”,则显示X
  • 否则显示Y

控制器:

@referer = URI(request.referer).path

查看:

<% if (@referer == '/search') %>
    <p><%= link_to('<< Back to results', :back)%></p>
<% else %>
    <p>Tadamm</p>
<% end %>

问题: 当有引用者时,例如“搜索”,就可以了。当没有引用者时,比如直接访问,我有这个错误:

错误参数(预期的 URI 对象或 URI 字符串)

你能帮帮我吗?

【问题讨论】:

    标签: ruby-on-rails ruby uri


    【解决方案1】:
    @referer = URI(request.referer).path
    

    URI 方法需要一个“URI 对象或 URI 字符串”。但是如果没有推荐人,那么你就不会给它任何一个。这相当于调用URI(nil).path。一个快速的解决方法是:

    @referer = request.referer && URI(request.referer).path
    

    这样,如果没有引用者,@referer 将设置为 nil,您的 if 语句将按预期工作。

    【讨论】:

    • 谢谢乔丹,现在好了!我明白了;-)
    【解决方案2】:
    @referer = request.referer ? URI(request.referer).path : nil
    

    【讨论】:

    • 感谢 Sergey 的快速解答
    猜你喜欢
    • 2011-11-21
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多