2011-08-10 43 views

回答

-17

它可能使用一些正则表达式例如

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

有很多方法可能会失败。当健壮的解析器已经存在时,我们不要使用片状正则表达式。 –

+0

这样一个不好的答案,使用CGI解析在dup答案链接中解释。 – DGM

+0

我不同意我的答案是**穷**,而DGM的答案是**正确的**因为两种方法都依赖于网址的结构,我的所有三个参数以及DGM都可以获得和ID。如果url不同,两者都会失败。 我同意使用CGI获取x和y值看起来很漂亮。 – Bohdan

2

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

x = params[:x] 
y = params[:y] 
+1

感谢,但是...我不能这样做,第一:我的代码在模型中,第二个url是从html文本代码中提取的字符串。 –

10

正确方式来完成:

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) 
+0

你忘记了一个'id' – Bohdan

+0

更新以获得id然后。 :) – DGM

+0

编辑是错误的,并建议编辑修复它被错误地拒绝。我已纠正它。 – DGM