2009-05-21 60 views
2

我想在rails中創建乾淨的網址。我已經安裝了PermalinkFu,我可以生成鏈接就好了。我想要做的是保持我的RESTful資源。有沒有辦法我可以超載:有沒有辦法在rails中重載map.resources?

map.resources :location 

要返回:永久鏈接變量而不是:id?

我怎麼可以創建類似:

map.connect 'location/:permalink' :controller => 'location', :action => 'show' 

一個側面說明:什麼是用於處理靜態鏈接的最佳實踐,它們只用於顯示視圖/ show動作然後使用:ID爲編輯/破壞的/ etc?我應該甚至關心控制器使用:id而不是:permalink作爲變量名嗎?

回答

2

這是我的方式來解決這個問題:

使用to_param方法在模型中的位置:

def to_param 
    permalink 
end 

,並在你的routes.rb

map.resources :location 

有是不需要添加固定鏈接的規則

然後你可以找到在你的控制器這樣

@location = Location.find_by_permalink params[:id] 

希望工程。

+0

這正是你所做的。 – 2009-05-21 15:05:16

+1

對,上面是我現在正在嘗試改變的。 這似乎對任何人都不sl??當你真的傳遞params [:permalink]時使用params [:id]變量? 我想要做的是有map.resources:位置填充params [:永久鏈接] var而不是params [:id] – 2009-05-21 18:27:02

0

是否有原因導致您無法覆蓋Location模型中的to_param方法?瑞安貝茨有Railscast that explains how to do this

如果你想成爲一個純粹主義者,那麼你應該對所有的動作使用固定鏈接,但無論如何使用數字標識符來編輯和銷燬動作無疑更加方便。我想這取決於你是否被瀏覽HTML的人困擾並能夠看到你的記錄的實際主鍵。有些人可能認爲這是一個安全漏洞。