这是我在routes.rb文件中使用的
match 'trackers/(:token)' => 'trackers#show'
resources :trackers do
resources :locations
end
无论如何都要在匹配语句下嵌套:locations
,因此位置的URL将使用跟踪器的令牌(这是一个字母和数字的长度为六个字符串),而不是使用跟踪器的ID?此外,无论URL中的字符是什么情况,我都希望匹配语句有效...所有令牌都以1X开头,但如果有人输入1x,我仍然希望它能够正常工作。我似乎无法破译可以使其工作的语法/正则表达式。
答案 0 :(得分:2)
只需在to_param
模型中添加Tracker
方法即可解决所有这些问题:
def to_param
token
end
然后你可以完全摆脱你的match
声明。使用tracker_path(tracker)
,edit_tracker_path(tracker)
等生成的所有链接都会自动使用您的token
字段。
但是,请注意,即使它使用token
字段,您的表单仍会将值提交为params[:id]
,而不是params[:token]
。