有关最完整、用户友好的文档,请参阅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 许可发布。
特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地使用本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或销售软件的副本,并允许向其提供软件的人员这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有者均不对因本软件或本软件中的使用或其他交易而产生或与之相关的任何索赔、损害或其他责任负责,无论是合同、侵权行为还是其他行为。软件。