Ruby on rails 3 友好的id和使用保留字时的设计错误
我使用friendly id允许用户使用其登录名访问配置文件,但当我尝试使用friendly id保留的登录名注册时,出现了一个错误。似乎Desive无法正确呈现错误消息。当我使用authlogic时,这个错误可以正常工作 友好的\u 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
: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]。是否存在?