【问题标题】:rails, how to get params from url string? [duplicate]rails,如何从 url 字符串中获取参数? [复制]
【发布时间】:2011-08-10 14:58:58
【问题描述】:

可能重复:
How do I easily parse a URL with parameters in a Rails test?

对不起我的英语......

我的 archives.rb 模型中有一个方法可以从 html 内容中获取所有 src 属性,我得到的 src 是这样的:

http://localhost:3000/es/editor/archives/28/show_image?x=142&y=142

我需要从该网址获取参数,具体来说:id, x, y

谢谢, 问候。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 url params


    【解决方案1】:

    正确的方法:

    url = "http://localhost:3000/es/editor/archives/28/show_image?x=142&y=142"
    uri = URI::parse(url)
    id = uri.path.split('/')[4]
    params = CGI::parse(uri.query)
    

    【讨论】:

    • 你忘了id
    • 更新后获取 id。 :)
    • 编辑错误,修复它的建议编辑被错误地拒绝。我已经更正了。
    【解决方案2】:

    在您的控制器中,您可以执行“params[:x]”和“params[:y]”。例如:

    x = params[:x]
    y = params[:y]
    

    【讨论】:

    • 谢谢,但是...我不能这样做,首先:我的代码在模型中,其次,url 是从 html 文本代码中提取的字符串。
    【解决方案3】:

    例如可以使用一些正则表达式来完成

    irb(main):011:0> s = "http://localhost:3000/es/editor/archives/28/show_image?x=142&y=142"
    => "http://localhost:3000/es/editor/archives/28/show_image?x=142&y=142"
    irb(main):012:0> s[/.*\/(\d+).+x=(\d+).*y=(\d+)/,1]
    => "28"
    irb(main):013:0> s[/.*\/(\d+).+x=(\d+).*y=(\d+)/,2]
    => "142"
    irb(main):014:0> s[/.*\/(\d+).+x=(\d+).*y=(\d+)/,3]
    => "142"
    irb(main):015:0>
    

    【讨论】:

    • 失败的方式有很多。当强大的解析器已经存在时,我们不要使用易碎的正则表达式。
    • 如此糟糕的答案,请按照 dup 答案链接中的说明使用 CGI 解析。
    • 我不同意我的答案是,而 DGM 的答案是正确,因为这两种方法都依赖于 url 的结构,我的答案是全部三个参数和 DGM 的获取和标识。如果 url 不同,两者都会失败。我同意使用 CGI 获取 x 和 y 值看起来很漂亮。
    猜你喜欢
    • 2011-05-08
    • 2012-07-13
    • 2016-12-03
    • 1970-01-01
    • 2012-09-17
    • 2021-08-16
    • 2012-03-17
    • 2021-03-06
    • 2011-11-11
    相关资源
    最近更新 更多