2011-05-05 158 views
0

这是我使用的是什么在我的routes.rb文件嵌套路由(和约束)

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

    resources :trackers do 
    resources :locations 
    end 

反正是有比赛的语句下窝:locations,所以位置的URL会使用跟踪令牌(这是一串字母和数字六长),而不是使用跟踪器的ID?另外,无论URL中的字符如何,我都希望匹配语句能够正常工作......所有的令牌都以1X开头,但如果有人键入1x,我仍然希望它能够正常工作。我似乎无法破译将使这项工作的语法/正则表达式。

回答

2

你可以通过简单地增加一个to_param方法您Tracker模式避开这一切:

def to_param 
    token 
end 

那么你可以得到完全摆脱你match声明。使用tracker_path(tracker),edit_tracker_path(tracker)等生成的所有链接将自动使用您的token字段。

但请记住,即使它使用的是token字段,表单仍会提交params[:id]而不是params[:token]

+0

这是我的下一个问题......因此,位置表中的外键(例如tracker_id)仍然会与跟踪器表中的主键匹配? – Slick23 2011-05-05 13:41:10

+1

正确,一旦你做了一些像'Tracker.find_by_token(params [:id])',返回对象中的id域仍然是数字id,而不是令牌。 – 2011-05-05 13:43:35