2011-04-11 44 views
1

男孩,這似乎是小菜一碟,但在routing bible我不能找到它 -改變從:標識在URL中的Rails 3路由

有沒有辦法來改變默認參數「:身份證'其他的東西像':pid'而不使用'match/post /:pid'?我想避免使用'匹配',因爲它感覺特別脆弱。

編輯要確認,這僅僅是一個成功,如果我能做到:

pid = params[:pid] 

這樣做:

pid = params[:id] 

作品了,但就是錯誤的代碼,因爲它不是在一個id那裏。

回答

0

您可以在模型中定義一個to_param方法:

def to_param 
    pid 
end 

然後所有生成的鏈接的,等會使用的pid代替id。而在你的控制器中,params[:id]實際上會給你pid,而不是id

+0

與上面相同的評論 - 我想使用params [:pid]來獲得pid,而不是params [:id]。 – aronchick 2011-04-12 03:54:47

+0

然後,我很確定你需要硬編碼的路線,使之發生... – 2011-04-12 13:47:00

+0

獲取檢查,因爲你打破了壞消息,我必須硬編碼的路線:( – aronchick 2011-05-11 22:46:43

3

如果我給你正確的檢查了這一點:

http://railscasts.com/episodes/63-model-name-in-url

基本上你應該在模型覆蓋to_param方法:

def to_param 
    pid 
end 

而當你將要獲取一個對象,做這在控制器中:

@object= Object.find_by_pid(params[:id]) 

祝你好運!

+0

它實際上仍然使用'params [:id]',而不是'params [:pid]'(除非你使用':pid'作爲參數名稱來定義自定義路線)。 – 2011-04-11 16:22:21

+0

固定它..我的壞 – 2011-04-11 16:25:40

+0

正確,但這是一種氣味,因爲params [:id]有一個pid,而不是一個id。我想用params [:pid]來獲得pid。 – aronchick 2011-04-12 03:54:14