2011-05-07 17 views
5

我使用友好的id來允許用戶使用他們的登錄名稱訪問配置文件,但是當我嘗試註冊友好標識保留的登錄名時,出現錯誤。看來設計不能正確地呈現錯誤消息。當我使用authlogic時,錯誤正常工作。使用保留字時友好的id和設計錯誤

Friendly_id配置:

​​3210

錯誤:

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

我使用:

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

回答

0

通過這個discussion去後,我加了繼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,因爲我已經在我的正常驗證中檢查它。

2

與friendly_id 4.0.0.beta14 on 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初始化看起來是這樣的:

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

這可以縮短爲一個班輪 - error.add:name,* errors.delete(:friendly_id)如果錯誤[:friendly_id] .present?'如記錄[這裏](http://rubydoc.info/github/norman/friendly_id/master/FriendlyId/Reserved) – 2014-06-14 08:21:18

+0

檢查這些值會將它們添加到錯誤數組中。在檢查它們是否存在之前,我添加了'if [email protected]? && @errors [:friendly_id] .present?' – heavysixer 2015-05-19 16:12:36

0

你也可以改變你的config /區域設置/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