[英]Human readable URL causes a problem in Ruby on Rails
我有一個帶有“公司”模型的基本CRUD。 為了顯示公司名稱,我做了
def to_param
name.parameterize
end
然后,我訪問了http://localhost:3000/companies/american-express
,該公司在company控制器中運行show
action。
顯然,這是行不通的,因為show
方法如下:
def show
@company = Company.find_by_id(params[:id])
end
params[:id]
是american-express
。 此字符串未存儲在任何地方。
保存記錄時,是否需要在數據庫中存儲短字符串(即“ american-express”)? 還是有什么方法可以在不將字符串保存到數據庫的情況下檢索公司數據?
發送帶有參數化值的ID;
def to_param
new_record? ? super : "#{id}-#{name}"
end
當您使用show方法收集數據時,可以使用整個參數。
def show
@company = Company.find("12-american-express"); // equals to find(12)
end
還有一個名為permalink_fu的插件,您可以在此處了解更多信息。
我認為friendly_id更有用。
我在博客軟件中對Category
模型進行了類似的操作。 如果可以保證parameterize
方法對公司名稱所做的唯一轉換就是用破折號替換空格字符,那么您可以簡單地進行反處理:
def show
@company = Company.find_by_name(params[:id].gsub(/-/, ' '))
end
我也建議Friendly_id gem。 它使您可以靈活地使用固定的永久鏈接條,還可以去除變音符號,轉換為全ASCII等。基本上,這使您的生活變得輕松多了,並且您可以毫不費力地獲得“真正的”永久鏈接(無需to_param和id解決方法)。
哦,我是否提到了永久鏈接也是版本化的,所以您可以使舊的過時的永久鏈接重定向到當前的永久鏈接? :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.