2010-05-13 48 views
0

說更多的信息,如果我稱之爲一個模式「交付」,我使用的默認URL路徑:Rails的路線創造了URL

# Install the default routes as the lowest priority. 
    map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 

所以提供的網址是:

http://localhost:3000/deliver/123 

我正在努力解決的是如何使用數據庫中的另一個字段或替代ID。

例如。如果我在創建視圖中有一個名爲'deliverraddress'的字段,我該如何將它放入路由中?

所以我可以有一些環節是:

http://localhost:3000/deliver/deliveraddress 

感謝,

丹尼

+0

那個/ deliverraddress會顯示什麼?我想你會希望將傳播地址與特定的傳遞相關聯,因此鏈接將是http:// localhost:3000/deliver/123/deliverraddress對不對? – 2010-05-13 14:41:30

+0

是的,說實話,這都是爲了不可能猜測交付鏈接。 – dannymcc 2010-05-13 14:44:51

+0

換句話說,您將*擁有直接交付鏈接,否則您將無法猜測具體交付的正確網址。 – dannymcc 2010-05-13 14:45:40

回答

2

因爲它從你的意見就像你試圖混淆ID在你的URL的聲音,我會建議你看看這個問題,這是幾天前問的。

Obfuscating ids in Rails app

1

首先,在URL 「http://localhost:3000/deliver/123」 匹配任何默認路由規則。但是,只有在聲明瞭「資源」後,它纔會生成這樣的RESTful URL。

在你的情況下,只需要實現交付模型「to_param」的方法:

class Deliver < ActiveRecord::Base 
    def to_param 
    return self.deliveraddress 
    end 
end 

它會產生你想通過調用url_for方法的URL,如link_to @deliver

不要忘記,以確保您在數據庫中擁有獨一無二的交付地址,因此您永遠不會找到具有一個地址的重複記錄。

之後,你需要行動來更新finder方法:

def show 
    @deliver = Deliver.find_by_deliver_address!(params[:id]) 
end 

希望這個答案將是有益的。

+0

也許更好的辦法是讓to_param返回「#{id} /#{deliverraddress}」,然後更新你的路線和發現者來處理它,這將允許在deliverraddress列中重複 – 2010-05-13 21:12:56