关于ActiveRecord .find(id)方法的一个奇怪的事情

时间:2013-01-24 15:40:51

标签: ruby-on-rails rails-activerecord

如果我有ID 1的Post模型,

我可以通过

访问此资源
 http://localhost:3000/posts/1

但是,当我使用这些URL时,我会得到相同的结果。

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

我该如何防止这种情况?

2 个答案:

答案 0 :(得分:3)

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

您可以在路线级别修复此问题:

resources :posts, :constraints => {:id => /[0-9]+/}

答案 1 :(得分:1)

两个主要选项:

  1. Put a constraint on the route
  2. 验证控制器中的参数(例如,使用正则表达式)。
  3. 它起作用的原因是因为"1abc".to_i == 1