FriendlyId 是用來讓 ActiveRecord 產生 Slug 的 Gem,一般 Rails App 通常是用資料庫的 id,以 SQL 資料庫來說就會是一個遞增的整數 http://example.com/users/1
,這樣的網址沒有意義,會讓競爭對手知道你有多少 Record,而且要寫爬蟲也非常簡單,一直遞增數字就可以把整個網站爬完了。
為了解決這個問題,通常會產生 Slug 來當做 record 的識別,一般的用法是這樣:
1 2 3 4 |
|
如果 slug 是唯一的,就可以用 http://example.com/users/roach-king
來讀取到唯一的 record,而不會有醜醜的網址:
1 2 3 4 5 6 |
|
可是這個 Gem 的設計會使用 ActiveSupport 的 parameterize,把非 a-z,0-9,-
的字元全部變成 -
,於是中文字就會被吃掉了:
1 2 3 |
|
為了解決這個問題,可以用另外一個 Gem babosa 來配合,他可以把 UTF-8 字元處理好,而不是都消滅:
1
|
|
跟 FriendlyId 配合只要把 normalize_friendly_id
override 就可以了:
1 2 3 4 5 6 7 8 9 |
|