20170723百寶箱2-1至

在做 model 的 CRUD 時,一個resources :events這樣的路由,它的 show 頁面的網(wǎng)址總是這樣:

/events/123

這樣的網(wǎng)址有幾個缺點:

SEO(Search Engine Optimization、搜尋引擎優(yōu)化) 不夠好。只有數(shù)字,而不是有意義的文字。

洩露了數(shù)據(jù)庫中的資料量,聰明的用戶可以透過修改網(wǎng)址,就可以猜到數(shù)據(jù)庫有多少筆資料。

讓我們依序解決這個問題,這里提供三種層次的解決方案:

方案一:網(wǎng)址上除了數(shù)字ID,可以再加上文字

方案二:不要用數(shù)據(jù)庫的遞增數(shù)字ID,而是用一個亂數(shù)產(chǎn)生的 ID

方案三:除了用亂數(shù)ID,也可以讓用戶自定義 ID


今天學(xué)到的就是如何自定義網(wǎng)址

2-2 方案一:網(wǎng)址ID+文字

方案一:網(wǎng)址上除了數(shù)字ID,可以再加上文字

修改app/models/event.rb,加上一個to_param方法:

app/models/event.rb

class Event < ApplicationRecord? ??

validates_presence_of :name+? def to_param

+? ? "#{self.id}-#{self.name}"

+? endend

這樣就好了,出來的網(wǎng)址就會變成/events/123-活動名稱。

解說一:

在調(diào)用路由方法時,Rails 默認都會用 to_param 方法來轉(zhuǎn)換 ID,例如:

event_path(@event)等同于event_path(@event.to_param)

而這個to_param方法其實是一個 Rails 默認就有的方法,它本來是這樣的:

def to_param

self.id

end

這就是為什么你不需要特地寫event_path(@event.id),因為 Rails 默認調(diào)用了to_param

解說二:

在 controller 中的@event = Event.find(params[:id])為什么不需要修改呢?

因為 Rails 在find的時候,會先調(diào)用to_i轉(zhuǎn)成純數(shù)字的 ID。

而任意字串to_i之后,只會留下前面的數(shù)字,后面非數(shù)字的字串都會忽略掉。

于是"123-XXXXX".to_i就變成123了,和本來的數(shù)字ID是一致的。


2-3 方案二: 亂數(shù) ID

方案二:不要用數(shù)據(jù)庫的遞增數(shù)字ID,而是用一個亂數(shù)產(chǎn)生的 ID

如果不要顯示數(shù)據(jù)庫的遞增整數(shù) ID 的話,我們需要在 events 上新增另一個字段來做識別。

執(zhí)行 rails g migration add_friendly_id_to_events

end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • github地址,歡迎大家提交更新。 express() express()用來創(chuàng)建一個Express的程序。ex...
    Programmer客棧閱讀 2,827評論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • Address:https://www.zybuluo.com/XiangZhou/note/208532 Exp...
    天蠍蒗漫閱讀 11,620評論 2 55
  • 月入五千,你追求奢華 你的能力撐不起你的虛榮 不如等你月入兩萬時再說 父母生活還在茍且 你有什么資格去追尋詩和遠方...
    酷雪冰凌閱讀 192評論 8 2

友情鏈接更多精彩內(nèi)容