2011-05-07 27 views
5

का उपयोग करते समय त्रुटि उत्पन्न करें। मैंने अपने लॉगिन नाम के साथ उपयोगकर्ता पहुंच प्रोफ़ाइल की अनुमति देने के लिए दोस्ताना आईडी का उपयोग किया, लेकिन जब मैं दोस्ताना आईडी द्वारा आरक्षित किया गया लॉगिन नाम के साथ साइन अप करने का प्रयास करता हूं, तो मुझे एक त्रुटि मिली। ऐसा लगता है कि विवेक त्रुटि संदेश को सही तरीके से प्रस्तुत नहीं कर सकता है। जब मैं 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' 

उत्तर

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 के साथ निम्न काम करता है 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, * error.delete (: friendly_id) अगर त्रुटियां [: friendly_id] .present?' दस्तावेज के रूप में [यहां] (http://rubydoc.info/github/norman/friendly_id/मास्टर/फ्रेंडली आईडी/आरक्षित) –

+0

इन मानों का निरीक्षण करने से उन्हें त्रुटि सरणी में जोड़ दिया जाएगा। यह देखने से पहले कि वे मौजूद हैं या नहीं, मैंने 'if [email protected] जोड़ा? && @errors [: friendly_id] .present? ' – heavysixer

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 की तरह पढ़ता है।

संबंधित मुद्दे