2011-07-01 36 views
0

可以說我有一個Page資源,並且特定實例的id = 5和permalink = foobar。在Rails中覆蓋生成的restful url幫助程序

resources :pages我可以使用<%= link_to @page.title, @page %>它輸出url「/ pages/5」。

我該如何輸出「/ pages/foobar」呢?同樣的編輯url ...我如何使edit_page_path(@page)輸出「/頁/ foobar /編輯」?

UPDATE

答案至今說來覆蓋Page.rb to_param這是一個很好的開始。每個+1。但是如果我想<%=link_to @page.title, @page%>輸出「/:permalink」而不是「/ pages /:permalink」?我會接受那個答案。

回答

1

您想要使用固定鏈接。

添加到您的模型:

class Post 

    def to_param 
     "#{id}-{title}" 
    end 

end 

這是假設你有一個標題。

一旦你得到這個你想看看查找permalink-fu,或者它實際上是非常簡單的用做自己保存後:

類崗位

before_save :manage_peramlink 

def manage_peramlink 
    permalink = "#{name.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase}" 
end 

def to_param 
    "permalink" 
end 

確保您將peramlink作爲字段添加到您的模型中。

3

您可以覆蓋模型中的to_param方法,該方法將告訴Rails使用什麼來代替路由的主鍵。

例如

class Page 
    def to_param 
    "#{self.id}-#{self.title.parameterize}" 
    end 
end 

的參數化調用使您的標題URL友好,你可能還注意到使用self.id的,這是在情況下建議你有一個重複的標題。

+0

啊,很酷。但是......如果我想將頁面路徑設置爲「/:permalink」而不是「/ pages /:permalink」? – tybro0103

+0

您必須在config/routes.rb文件中創建自定義路由。比如'match /:permalink'=> pages#show'(關閉我的頭頂) – basicxman

+0

是的,但是我該如何讓助手生成url呢? – tybro0103