дружественный идентификатор и разработка ошибки при использовании зарезервированного слова - PullRequest
5 голосов
/ 07 мая 2011

Я использовал дружественный идентификатор, чтобы разрешить пользователю доступ к профилю с его логином, но когда я пытаюсь зарегистрироваться с логином, зарезервированным дружественным идентификатором, я получил ошибку. Кажется, devise не может правильно отобразить сообщение об ошибке. Ошибка просто отлично работает, когда я использую authlogic.

Friendly_id Конфиг:

:reserved_words => ["index", "new", "users", "admin", "login", "logout", "books",
                    "administrator", "signup"],

Ошибка:

FriendlyId::ReservedError in Devise::RegistrationsController#create
FriendlyId::ReservedError

Я использую:

gem 'devise', '1.3.4'
gem 'friendly_id', '3.2.1.1'

Ответы [ 4 ]

2 голосов
/ 12 ноября 2011

Следующее работает с friendly_id 4.0.0.beta14 в Rails 3.1.1

extend FriendlyId
friendly_id :name

after_validation :validate_reserved

def validate_reserved
  if @errors[:friendly_id].present?
    @errors[:name] = "is reserved. Please choose something else"
    @errors.messages.delete(:friendly_id)
  end
end

Мой инициализатор friendly_id.rb выглядит так:

0 голосов
/ 16 июля 2019

Или просто отредактируйте файл config/initilaizers/friendly_id.rb и добавьте зарезервированные слова в

config.reserved_words = %w( [...] )
Блок

, как свидетельствует документация .

0 голосов
/ 18 сентября 2014

Вы также можете изменить свой config / locales / en.yml или соответствующий языковой файл:

en:
  activerecord:
    errors:
      models:
        your_model_name:
          attributes:
            friendly_id:
              exclusion: 'name is a reserved word'

Читается как Validation failed: Friendly name is a reserved word.

0 голосов
/ 27 мая 2011

Пройдя через это обсуждение , я добавил следующее в user.rb, и, похоже, оно работает нормально:

after_validation :validate_reserved

def validate_reserved
        slug_text
        rescue FriendlyId::BlankError
        rescue FriendlyId::ReservedError
        @errors[friendly_id_config.method] = "is reserved. Please choose something else"
        return false
end

Я также добавил условие, при котором он будет спасать FriendlyId :: BlankError, поскольку я уже проверяю его в своей обычной проверке.

...