Rails 3路由非数字ID

时间:2011-03-28 17:02:56

标签: ruby-on-rails routes

我有一个对象,必然有一个看起来像“1.3.6.1.4.1.25623.1.0.14377”的id。当我尝试创建一个使用id的链接(例如link_to my_object(object.id))时,Rails 3 barfs并说没有路由存在。

我已经通过尝试link_to my_object(1)验证了我的有效路线。 Rails在创建此链接时没有问题。

有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:4)

我已经弄明白了...默认情况下,当在参数字段中找到句点(。)时(在这种情况下为id),Rails会发抖。要更改此行为,只需在路由语句中添加:constraints指令,并明确告诉它参数应该是什么样子。在我的情况下,事实证明以下问题解决了这个问题:

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

感谢Avdi Grimm他最有帮助的博文。

答案 1 :(得分:0)

也许您应该在模型中覆盖方法to_param,Rails使用它来生成路由ID。 通常它看起来像这样:

def to_param
  object.parameterize
end

它获取模型的名称并在路线中用作id。