有關最完整、用戶友好的文檔,請參閱FriendlyId 指南。
FriendlyId 是 Active Record 的重擊和永久連結插件的「瑞士陸軍推土機」。它可以讓您創建漂亮的 URL 並使用人類友好的字串,就好像它們是數字 ID 一樣。
借助FriendlyId,您可以輕鬆地讓您的應用程式使用如下URL:
https://example.com/states/washington
而不是:
https://example.com/states/4323454
使用“Friendly-id”標籤在 Stack Overflow 上提問,有關錯誤,請查看錯誤部分
FriendlyId 提供許多進階功能,包括:
將此行新增至應用程式的 Gemfile 中:
gem 'friendly_id' , '~> 5.5.0'
注意:Rails 4.0+ 必須使用 5.0.0 或更高版本。
然後執行:
bundle install
將slug
欄位新增至所需的表(例如Users
)
rails g migration AddSlugToUsers slug:uniq
產生友善的設定檔和新的遷移
rails generate friendly_id
注意:如果您不使用 slug 歷史記錄功能,則可以刪除CreateFriendlyIdSlugs
遷移。 (閱讀更多)
運行遷移腳本
rails db:migrate
編輯app/models/user.rb
檔案如下:
class User < ApplicationRecord
extend FriendlyId
friendly_id :name , use : :slugged
end
編輯app/controllers/users_controller.rb
檔案並將User.find
替換為User.friendly.find
class UserController < ApplicationController
def show
@user = User . friendly . find ( params [ :id ] )
end
end
現在,當您建立新使用者時,如下所示:
User . create! name : "Joe Schmoe"
然後,您可以使用 URL http://localhost:3000/users/joe-schmoe 造訪使用者顯示器頁面。
如果您要將FriendlyId新增至現有應用程式並需要為現有使用者產生slugs,請從控制台、執行器執行此操作,或新增Rake任務:
User . find_each ( & :save )
:allow_nil
如果您想要避免引發ActiveRecord::RecordNotFound
並接受nil
,您可以將allow_nil: true
傳遞給friendly.find()
方法。
MyModel . friendly . find ( "bad-slug" ) # where bad-slug is not a valid slug
MyModel . friendly . find ( 123 ) # where 123 is not a valid primary key ID
MyModel . friendly . find ( nil ) # maybe you have a variable/param that's potentially nil
#=> raise ActiveRecord::RecordNotFound
MyModel . friendly . find ( "bad-slug" , allow_nil : true )
MyModel . friendly . find ( 123 , allow_nil : true )
MyModel . friendly . find ( nil , allow_nil : true )
#=> nil
請在該專案的 Github 問題追蹤器上報告它們。
如果您要報告錯誤,請包含以下資訊:
如果可以的話,如果您可以在 Github 上分叉FriendlyId,並添加重現您遇到的錯誤的測試,這會更有幫助。
有關如何報告錯誤的更多靈感,請參閱本文。
FriendlyId 最初由 Norman Clarke 和 Adrian Mugnolo 創建,早期得到 Emilio Tagua 的大力幫助。它現在由諾曼克拉克和菲利普阿恩特維護。
我們對許多志工多年來慷慨的捐款深表感謝。
版權所有 (c) 2008-2020 Norman Clarke 和貢獻者,根據 MIT 許可發布。
特此免費授予任何獲得本軟體和相關文件文件(「軟體」)副本的人不受限制地使用本軟體,包括但不限於使用、複製、修改、合併的權利、發布、分發、再授權和/或銷售軟體的副本,並允許向其提供軟體的人員這樣做,但須滿足以下條件:
上述版權聲明和本授權聲明應包含在本軟體的所有副本或主要部分中。
本軟體以「現況」提供,不提供任何明示或暗示的保證,包括但不限於適銷性、特定用途的適用性和不侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.