簡體   English   中英

可讀URL導致Ruby on Rails中的問題

[英]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

嘗試使用permalink_fu插件,該插件在rails中創建SEO友好的URL。

http://github.com/technoweenie/permalink_fu

干杯

sameera

我也建議Friendly_id gem。 它使您可以靈活地使用固定的永久鏈接條,還可以去除變音符號,轉換為全ASCII等。基本上,這使您的生活變得輕松多了,並且您可以毫不費力地獲得“真正的”永久鏈接(無需to_param和id解決方法)。

哦,我是否提到了永久鏈接也是版本化的,所以您可以使舊的過時的永久鏈接重定向到當前的永久鏈接? :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM