Rails,如何从URL字符串中获取参数?

6

可能是重复问题:
如何在Rails测试中轻松解析带有参数的URL?

抱歉我的英语不好...

在我的archives.rb模型中,我有一个方法可以从HTML内容中获取所有src属性,我获取到的src如下:

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

我需要从该URL获取参数,具体而言是:id、x、y

谢谢, 问候。

3个回答

19

正确的方法是:

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 - Bohdan
已更新以获取ID。 :) - DGM
编辑错误,建议进行修正的修改被错误地拒绝了。我已经纠正了它。 - DGM

3

在你的控制器中,你可以使用'params[:x]'和'params[:y]'。例如:

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

1
谢谢,但是我做不到,首先:我的代码在一个模型中,其次URL是从HTML文本代码中提取的字符串。 - el_quick

-21

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

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>

2
有很多方面可能会失败。我们不应该使用不稳定的正则表达式,而是应该使用已经存在的强大解析器。 - Marc-André Lafortune
这样的回答太差了,按照重复的答案链接中所解释的使用CGI解析。 - DGM
我不同意我的答案是“差”的,而DGM的答案是“正确”的,因为两种方法都取决于URL的结构,我的方法是获取所有三个参数,而DGM的方法是获取ID。如果URL不同,两种方法都会失败。 我确实同意使用CGI获取x和y值看起来很漂亮。 - Bohdan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接