5

我使用友好 ID 允许用户使用其登录名访问配置文件,但是当我尝试使用友好 ID 保留的登录名进行注册时,出现错误。似乎设计无法正确呈现错误消息。当我使用 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

5 回答 5

2

以下适用于 Rails 3.1.1 上的 friendly_id 4.0.0.beta14

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 初始化程序如下所示:

FriendlyId.defaults do |config|
  config.use :slugged, :reserved
  config.reserved_words = %w(new edit index show data)
end
于 2011-11-11T20:41:16.350 回答
1

或者简单地编辑config/initilaizers/friendly_id.rb文件并将您的保留字添加到

config.reserved_words = %w( [...] )

块,正如文档所证明的那样。

于 2019-07-16T15:20:07.650 回答
0

After going through this discussion, I added following in user.rb and it seems to work fine:

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

I have also added a condition where it will rescue FriendlyId::BlankError as I am already checking it in my normal validation.

于 2011-05-27T08:32:40.943 回答
0

您还可以更改 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

于 2014-09-17T20:08:17.730 回答
0

感谢@Jerome 它修复了我的错误

config/initilaizers/friendly_id.rb
config.reserved_words = %w(new edit index session login logout sign_out users admin
    stylesheets assets javascripts images)
于 2020-02-18T16:17:35.427 回答