2011-05-05 134 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