将 @ 添加到friendly_id slug Ruby on Rails

问题描述

我在 Rails 应用程序中将 @ 符号添加slug 时遇到问题。

这是来自 user 模型的代码

validates_format_of :username,with: /^[a-zA-Z0-9_.](?!\w*__\w*)\w+$/,multiline: true

extend FriendlyId
friendly_id :custom_slug,use: :slugged

## Friendly_id: change slug if user's username updated or slug is blank
def should_generate_new_friendly_id?
  slug.blank? && username_changed?
end

## Friendly_id: add @ to slug
def custom_slug
  "@#{username}"
end

它适用于任何其他字符串,但由于某种原因,它不允许我在 slug 前面添加 @。最初的想法是为每个用户获得一个不错的 URL,例如 www.website.com/@username

有没有办法让 friendly_id 添加 @ 符号?

PS:如果您认为这是个坏主意,我也很想知道。

解决方法

@ 字符是 URL 中的保留字符,意味着它具有特殊含义。如果要将其用作 URL 的简单部分而没有特殊含义,则必须先对其进行百分比编码。请参阅https://www.ietf.org/rfc/rfc3986.txt第 2.1 和 2.2 节