使用'/'作为分隔符来匹配路线似乎很容易,但我想使用连字符进行匹配。唯一的问题是动态文本中可能存在我想要出现在ID之前的连字符:
格式:http://www.cities.com/ - 示例:http://www.cities.com/los-angeles-california-123
匹配'/:description-:id'=> 'cities#show'不起作用,因为:description文本可以包含id。
我有什么方法可以匹配这种格式吗?我之前在使用Regex的.NET中做过这个,但是热爱我作为Ruby Dev的新生活。
谢谢!
答案 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'
即可开箱即用。
干杯,