2011-04-01 13 views
47

मंच: मैक OSX 10.6रूबी ऑन रेल्स 3: "वर्ग के लिए सुपर क्लास बेमेल ..."

मेरी टर्मिनल में, मैं के साथ "रेल ग"

पर रूबी निम्नलिखित जबकि रूबी सांत्वना शुरू

class Word < String 
    def palindrome? #check if a string is a palindrome 
    self == self.reverse 
    end 
end 

मैं त्रुटि संदेश मिलता है: 3 ट्यूटोरियल एक वर्ग का निर्माण करने के

TypeError: superclass mismatch for class Word 
    from (irb):33 
    from /Users/matthew/.rvm/gems/[email protected]/gems/railties-3.0.5/lib/rails/commands/console.rb:44:in `start' 
    from /Users/matthew/.rvm/gems/[email protected]/gems/railties-3.0.5/lib/rails/commands/console.rb:8:in `start' 
    from /Users/matthew/.rvm/gems/[email protected]/gems/railties-3.0.5/lib/rails/commands.rb:23:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

ट्यूटोरियल यह पता चलता है कि कोई समस्या नहीं है और मुझे पता है कि कोड ठीक है; मैंने अन्य संबंधित प्रश्नों की खोज की है, लेकिन वे सभी रुबी 2 से 3 या एआरबी बनाम एरबी से माइग्रेटिंग शामिल हैं।

+0

आप कोड ठीक है – fl00r

उत्तर

62

आप पहले से ही एक Word वर्ग कहीं परिभाषित किया गया है। मैंने एक रेल 3 ऐप के भीतर कोशिश की लेकिन दोहराने में सक्षम नहीं था।

यदि आप एक दूसरे Word वर्ग स्वयं नहीं बनाया है, यह संभावना है अपने रत्न या प्लग इन में से एक पहले से ही है यह परिभाषित करता है।

+2

धन्यवाद, मैं कंसोल को पुनरारंभ करना समाप्त कर दिया। इससे पहले, मैंने एक अलग वर्ग नाम का उपयोग किया था, फिर भी वही त्रुटि मिली। –

+0

रत्न या प्लगइन्स के बारे में संकेत के लिए धन्यवाद शायद कक्षा को परिभाषित करने के लिए मैदान। मेरे पेज नियंत्रक में JRuby 1.7.1 एप्लिकेशन में समस्या थी। इसका नाम बदलकर इस मुद्दे को हल किया गया। – emrass

6

मैं अभी यह एक ही समस्या थी। असल में इसका मतलब है कि शब्द को कहीं और कक्षा के रूप में परिभाषित किया गया है और मेरा अनुमान है कि यह रेल-संबंध मणि पर है। बस शब्द को Word2 में बदलें और इसे ट्यूटोरियल पर ठीक काम करना चाहिए।

18

यह भी हो सकता है जैसे:

# /models/document/geocoder.rb 
class Document 
    module Geocoder 
    end 
end 

# /models/document.rb 
require 'document/geocoder' 

class Document < ActiveRecord::Base 
    include Geocoder 
end 

भार Document (जो वस्तु की एक सुपर क्लास है) Document < ActiveRecord::Base से पहले (जो एक अलग सुपर क्लास है) की आवश्यकता है।

मैं नोट करना चाहिए कि एक रेल पर्यावरण की आवश्यकता होती है आमतौर पर की जरूरत नहीं है, क्योंकि यह ऑटो वर्ग लोड हो रहा है है में।

+0

धन्यवाद, जिसने मेरे लिए एक बड़ा रहस्य हल किया! –

13

मैं एक रेल 4 आवेदन के साथ समस्या थी। मैंने उपयोगकर्ता नामस्थान के तहत चिंताओं का उपयोग किया।

class User 
    module SomeConcern 
    end 
end 

विकास में सब कुछ ठीक काम करता है लेकिन उत्पादन में (मुझे लगता है कि preload_app सच है) मुझे मेल नहीं मिला त्रुटि मिली। फिक्स बहुत आसान था। मैंने अभी एक प्रारंभकर्ता जोड़ा:

require "user" 

चीयर्स!

+0

यह मेरे लिए सबसे निराशाजनक बात है! इच्छा है कि मैं इसे और अधिक बढ़ा सकता हूं! –

+0

मुझे यह समस्या भी है, क्या आप मुझे बता सकते हैं कि 'उपयोगकर्ता' की आवश्यकता क्यों है? – JeskTop

+1

@JeskTop बस उस एकल फ़ाइल के साथ 'कॉन्फ़िगर/प्रारंभकर्ता' में एक नई फ़ाइल जोड़ें। पूरे एप्लिकेशन को लोड होने से पहले शुरुआती चालक चलाते हैं और सुनिश्चित करते हैं कि मॉडल क्लास पहले लोड हो जाए। –

2

कभी-कभी हम जानते हुए बिना 'ओपन क्लास'। कुछ गहरी मॉड्यूल घोंसले के साथ उदाहरण के लिए:

# space_gun.rb 
class SpaceGun << Weapon 
    def fire 
    Trigger.fire 
    end 
end 

# space_gun/trigger.rb 
class SpaceGun 
    class Trigger 
    end 
end 

जब हम ट्रिगर परिभाषित करते हैं, हम मौजूदा SpaceGun वर्ग खोलें। यह काम। हालांकि अगर हम दो फाइलों को रिवर्स ऑर्डर में लोड करते हैं, तो त्रुटि उठाई जाएगी, क्योंकि हम पहले स्पेसगुन क्लास को परिभाषित करेंगे, लेकिन हथियार नहीं है।

कभी कभी हम इस गलती है क्योंकि हम स्पष्ट रूप से माता पिता वर्ग से उप मॉड्यूल (जैसे ट्रिगर) की आवश्यकता होती हैं। जिसका मतलब है कि इस मुद्दे के कारण कक्षा परिभाषा रिवर्स ऑर्डर कर दी जाएगी।

# surely nothing can go wrong if we require what we need first right? 
require 'space_gun/trigger' 
class SpaceGun << Weapon 
    def fire 
    Trigger.fire 
    end 
end 
# BOOM 

या तो

  1. हर खुला वर्ग घटना को हमेशा डाल विरासत ऑटो लोड हो रहा है पर निर्भर हैं।
संबंधित मुद्दे