如何根据以ID结尾的URL匹配rails路由?

时间:2013-05-21 00:48:29

标签: ruby-on-rails routes

使用'/'作为分隔符来匹配路线似乎很容易,但我想使用连字符进行匹配。唯一的问题是动态文本中可能存在我想要出现在ID之前的连字符:

格式:http://www.cities.com/ - 示例:http://www.cities.com/los-angeles-california-123

匹配'/:description-:id'=> 'cities#show'不起作用,因为:description文本可以包含id。

我有什么方法可以匹配这种格式吗?我之前在使用Regex的.NET中做过这个,但是热爱我作为Ruby Dev的新生活。

谢谢!

1 个答案:

答案 0 :(得分:0)

我会避免使用这些路由:只需传递param:id并将其拆分到控制器中。 例如。 City.find param[:id].split('-').last

更重要的是,请确保通过覆盖模型中的to_param来生成正确的溃疡:

def to_param
  "#{self.name.split(' ').join('-')}-#{self.id}" # FIXME need extra sanity checks
end

最后一招,除非你确实需要id作为最后一个arg,你最好把它放在开头,例如123-los-angeles,这样您无需在控制器中“解析”ID,Model.find '123-los-angeles'即可开箱即用。

干杯,

相关问题