2012-08-22 77 views
-3

我目前正在用以下命令創建一個標題slugged版本。strip/gsub恢復紅寶石

title_slug = self.title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') 

在某些情況下,我收到slu and,我應該將其轉換回原來的名稱。

有沒有簡單的方法做的代碼上面紅寶石逆(恢復蛞蝓名改回原來的名字。)?

回答

2

你slugification功能:

.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') 

顯然是一個不可逆函數,所以你不能回去簡單。如果你需要返回,你有幾個選項:

  1. 將slug存儲在數據庫中,以便您可以查詢它。
  2. 使用數據庫語言(SQL,JavaScript,...)實現您的slugification函數,以便您可以再次查詢它。

在這兩種情況下,當你用slug查詢時你會得到重複的,所以要麼你首先防止重複(通過修改slug來強制唯一性),要麼找出某種方法來選擇哪個結果你要。

4

那麼,沒有。你是從字符串中刪除信息(例如刪除所有不是字母數字的字母),所以你不能在之後重構它們。

你甚至不能安全地轉換橫線回空間 - 他們可能已經在原來的字符串破折號。 (感謝@XavierHolt!)

+0

甚至不能安全地將破折號轉換回空格 - 它可能是原始字符串中的破折號。 @Martin:最好存儲原始字符串,並在需要時創建slu since,因爲該方向至少很容易。 –

+0

@XavierHolt:對。謝謝! –

+0

@XavierHolt我正在嘗試做相反的事情(我已經存儲了原始字符串,並且正在接收對slug的請求) – Martin