Добавить @ в friendly_id slug Ruby on Rails

#ruby-on-rails #friendly-id

#ruby-on-rails #дружественный идентификатор

Вопрос:

У меня возникла проблема с добавлением @ символа slug в мое приложение Rails.

Вот код из 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? amp;amp; username_changed?
end

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

Он отлично работает с любой другой строкой, но по какой-то причине он не позволяет мне добавлять @ перед слизняком. Первоначальная идея состоит в том, чтобы получить приятный URL для каждого пользователя, например, www.website.com/@username

Есть ли какой-либо способ разрешить friendly_id добавление @ символа?

PS: Если вы считаете, что это плохая идея, я бы тоже хотел это знать.

Ответ №1:

Символ @ является зарезервированным символом в URL-адресах, что означает, что он имеет особое значение. Если вы хотите использовать его как простую часть URL-адреса без специального значения, сначала он должен быть закодирован в процентах. Смотрите https://www.ietf.org/rfc/rfc3986.txt разделы 2.1 и 2.2