Sinatra 问一个路由问题

metal · 2012年08月30日 · 最后由 virgil 回复于 2012年11月07日 · 3977 次阅读
get '/post/:id' do
  ...
end

localhost:4567/post/1 能打开。 localhost:4567/post/1/ 这样就是 404 不过这个我解决了/:id/?这样就对了。

问题是http://localhost:4567/post/1xxxxxkj&&这样居然也是能访问的。蛋疼呀。*

一定要写正则才能解决吗?

params[:id] 这样是不是默认转换了整数了?

一定要写正则才能解决吗? 为啥非要在后边加/

params[:id] 这样是不是默认转换了整数了? 如果能转换成整数就转换

一定要用正则才能解决的(我怎么觉得这个问题前几天有看到过,很强的近视感

#1 楼 @jjym 从逻辑上说http://www.foo.com/post/1http://www.foo.com/post/1/ 应该是一样的。这个问题我搞定了。另外一个问题就是http://www.foo.com/post/1#((* 或者http://www.foo.com/post/1-11118y887231871378 这样的访问应该是错误的才对。但是这 2 个都是可以访问到http://www.foo.com/post/1

比如这两个应该是不一样的才对 http://ruby-china.org/topics/5249 http://ruby-china.org/topics/5249-1321312312313

我做出来的结果是,这 2 个 url 请求得到的结果是一样的。 http://ruby-china.org/topics/5249 http://ruby-china.org/topics/5249-1

#3 楼 @metal 这区别就和 vim test.rb/ & vim test.rb 是一样的

你是说你现在做出来是一样的?然后你想要不一样?还是说你想要做成一样?

#3 楼 @metal 后面这种情况,request 中行到的 :id 是原始并且正确的值(依你的例子,一个为 5249,一个为 5249-1,两个都应为字符串。

问题出在 to_i 上。ActiveRecord 用 find 时,会把传入的值自动作 to_i,这样得到的值都是一样的。大部分网站都想要这种效果,id-seo-slug 这种形式的 url 比较流行。

#5 楼 @ashchan 最了解我的人还是你呀。刚刚用 hz2py 实现了 id-slug,现在看起来就正常。谢谢。

这个问题我也郁闷了很久啊

不过我的理解是 /xxx/是代表个到某个目录或环境里,/xxx是某个文件或动作

@metal 从逻辑上说http://www.foo.com/post/1http://www.foo.com/post/1/ 应该是一样的。这个问题我搞定了。请问你怎么搞定的呢?

#9 楼 @virgil

  1. 不用 id(int) 做 url。用字符串。
  2. 正则表达式搞定

@metal 字符串不行

你看看 params[:id] 的值就知道了

@metal @woaigithub 我的失误。。。汗。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号