0

如果我有 ID 1 的 Post 模型,

我可以通过以下方式访问此资源

 http://localhost:3000/posts/1

但奇怪的是,当我使用这些 URL 时,我可以获得相同的结果。

 http://localhost:3000/posts/1somethingweird-blah-blah-blah-idont-like-this

我怎样才能防止这种情况?

4

2 回答 2

3

这可能是因为params[:id]从 a 转换String为 anint并且在 Ruby 调用"1somethingweird-blah-blah-blah-idont-like-this".to_i中实际上会导致1.

您可以在路由级别解决此问题:

resources :posts, :constraints => {:id => /[0-9]+/}
于 2013-01-24T15:45:59.520 回答
1

两个主要选项:

  1. 对路线施加约束
  2. 验证控制器中的参数(例如,使用正则表达式)。

它起作用的原因是因为"1abc".to_i == 1.

于 2013-01-24T15:43:48.100 回答