0

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

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

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

我有什么办法可以匹配这种格式吗?我以前在 .NET 中使用 Regex 完成过此操作,但我热爱我作为 Ruby 开发人员的新生活。

谢谢!

4

1 回答 1

0

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

更重要的是确保您能够通过to_param在模型中覆盖来生成正确的 ulr:

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

最后一个技巧,除非您确实需要将 id 作为最后一个参数,否则最好将其放在开头,例如123-los-angeles,这样您就不需要“解析”控制器中的 id,Model.find '123-los-angeles'开箱即用。

干杯,

于 2013-05-21T01:13:44.673 回答