[英]rails sha1 hash for route to object?
我希望我的應用程序中的控制器不僅響應從其路由發送的對象的ID,而且實際上響應我使用Digest::SHA1.hexdigest
生成的sha1哈希。
所以代替:
/client/invoice/1
我希望網址是這樣的:
/client/invoice/0beec7b5ea3f0fdbc95d0
在Rails中更改對象的URL通常涉及兩件事:
首先,更改相關的控制器動作,以使用可以按照您希望的方式工作的查找器。 在您的情況下,您可能希望在Invoice模型中編寫一個自定義查找器,例如:
def self.find_by_id_or_sha1(id)
Invoice.find_by_id(id) || Invoice.find_by_sha1(id)
end
然后在您的控制器操作(顯示,編輯,更新,銷毀)中使用Invoice.find_by_id_or_sha1(params[:id])
)。
其次,更改生成的URL以遵循您的新設計(如果需要)。 因此,如果您希望link_to("Jan 1, 2010", @invoice)
轉到/client/invoice/0beec7b5ea3f0fdbc95d0
,請在Invoice模型中覆蓋默認的to_param
方法。 例如:
def to_param
sha1
end
(假定發票的SHA1哈希存儲在sha1屬性中。)
Invoice.first(:conditions=>["SHA(id) = ?",params[:id]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.