2008-11-16 64 views
2

我還是新來ROR,所以原諒問題的簡單...:ID在URL中

所以http://www.example.com/controller/:id顯示在我的表中的記錄,具有:ID爲一個數字(1,2,3等等。)。

有沒有我可以擁有的方法:URL中的id是顯示記錄中字段的值?這樣我可以有http://www.example.com/controller/record_field ??我想在我的表格中具有對人類友好的特定記錄的引用......我相信這一定是可能的。我在改變routes.rb中的內容嗎?

感謝您的幫助!

回答

4

最簡潔的方法是在您的模型中添加一個新的查找方法(或者簡單地使用find_by_fieldname Rails爲您提供控件)。然後,您將讓您的控制器使用該方法而不是常規查找(params [:id])來拉取模型記錄。

看看Ryan B對此here的屏幕錄像。這很容易,他是一個好老師,所以你不應該有任何問題。

0

我使用名爲friendly_id的優秀rails插件。

http://github.com/norman/friendly_id/tree/master

這應該很好地梳理你。它也是有據可查的。

小心周圍可能有現代希臘字符的字段 - 可能需要爲這些人找出解決方法。

0

Jon Smock的解決方案也可以工作。我傾向於喜歡以下。

class Hamburger << ActiveRecord::Base 

    #this normally defaults to id 
    def to_param 
    name 
    end 

end 

class SomeModelController << ApplicationController 

    def show 
    @hamburger = Hamburger.find(params[:id]) #still default code 
    end 
end 

#goes in some view 
This is the <%= link_to "tastiest hamburger ever", url_for(@hamburger) %>. 

這是嚴格意義上的搜索引擎優化技術(美麗的網址也方便用戶,我建議他們絕對每個人,即使你不關心搜索引擎優化,例如在頁面登錄後)。我對Rails SEO有更深入的討論,其中包括其他技巧,here

重要提示:您應該在設計時考慮如果param應該更改,您將要做什麼。例如,在我的漢堡包場景中,我完全可能會將「Sinasty Delicious Cheeseburger」重新命名爲「Triple Bypass」。如果更改了網址,可能會有一些影響,例如客戶鏈接到我的網站的損壞。因此,對於生產用途,我通常給這些模型一個不變的permalink屬性,我初始化爲具有人類意義的恰好一次。如果對象稍後發生變化,那麼URL保持不變。 (還有其他解決方案 - 這是最簡單的一個。)