Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 友好的id和使用保留字时的设计错误_Ruby On Rails 3_Devise_Friendly Id - Fatal编程技术网

Ruby on rails 3 友好的id和使用保留字时的设计错误

Ruby on rails 3 友好的id和使用保留字时的设计错误,ruby-on-rails-3,devise,friendly-id,Ruby On Rails 3,Devise,Friendly Id,我使用friendly id允许用户使用其登录名访问配置文件,但当我尝试使用friendly id保留的登录名注册时,出现了一个错误。似乎Desive无法正确呈现错误消息。当我使用authlogic时,这个错误可以正常工作 友好的\u id配置: :reserved_words => ["index", "new", "users", "admin", "login", "logout", "books", "administrator", "sig

我使用friendly id允许用户使用其登录名访问配置文件,但当我尝试使用friendly id保留的登录名注册时,出现了一个错误。似乎Desive无法正确呈现错误消息。当我使用authlogic时,这个错误可以正常工作

友好的\u 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'
在经历了这些之后,我在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,因为我已经在我的正常验证中检查了它。

以下内容适用于Rails 3.1.1上的FriendlyId 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
我的友好的\u id.rb初始值设定项如下所示:

FriendlyId.defaults do |config|
  config.use :slugged, :reserved
  config.reserved_words = %w(new edit index show data)
end

您还可以更改config/locales/en.yml或相应的语言文件:

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

它看起来像是验证失败:友好名称是一个保留字

,或者只需编辑
config/initilaizers/Friendly_id.rb
文件并将保留字添加到

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

块,作为。

谢谢@Jerome它修复了我的错误 不路由用户/注销,只需将注销添加到友好id保留字

config/initilaizers/friendly_id.rb
config.reserved_words = %w(new edit index session login logout sign_out users admin
    stylesheets assets javascripts images)

这可以缩短为一行-
errors.add:name,*errors.delete(:friendly\u id)if errors[:friendly\u id]。present?
如有记录,检查所有这些值都会将它们添加到错误数组中。在检查它们是否存在之前,我添加了
if@错误。空?&&@错误[:友好的\u id]。是否存在?