嵌套路由(和约束)

时间:2011-05-05 13:29:30

标签: ruby-on-rails ruby ruby-on-rails-3

这是我在routes.rb文件中使用的

  match 'trackers/(:token)' => 'trackers#show' 

  resources :trackers do
    resources :locations
  end

无论如何都要在匹配语句下嵌套:locations,因此位置的URL将使用跟踪器的令牌(这是一个字母和数字的长度为六个字符串),而不是使用跟踪器的ID?此外,无论URL中的字符是什么情况,我都希望匹配语句有效...所有令牌都以1X开头,但如果有人输入1x,我仍然希望它能够正常工作。我似乎无法破译可以使其工作的语法/正则表达式。

1 个答案:

答案 0 :(得分:2)

只需在to_param模型中添加Tracker方法即可解决所有这些问题:

def to_param
  token
end

然后你可以完全摆脱你的match声明。使用tracker_path(tracker)edit_tracker_path(tracker)等生成的所有链接都会自动使用您的token字段。

但是,请注意,即使它使用token字段,您的表单仍会将值提交为params[:id],而不是params[:token]