복붙노트

[RUBY-ON-RAILS] 레일 3 루비 : "클래스의 슈퍼 클래스 불일치 ..."

RUBY-ON-RAILS

레일 3 루비 : "클래스의 슈퍼 클래스 불일치 ..."

플랫폼 : 맥 OSX 10.6

"C 레일"내 터미널에서, 나는 루비 콘솔을 시작

클래스를 구축하기 위해 3 튜토리얼 레일에 루비를 다음 동안 :

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

내가 오류 메시지가 :

TypeError: superclass mismatch for class Word
    from (irb):33
    from /Users/matthew/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.5/lib/rails/commands/console.rb:44:in `start'
    from /Users/matthew/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.5/lib/rails/commands/console.rb:8:in `start'
    from /Users/matthew/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/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>'

그것은 아무 문제가 없으며 내가 코드를 잘 알고 있다는 튜토리얼을 보여줍니다; 나는 기타 관련 질문을 검색했지만, eruby 대 그들은 모든 관련 3 루비 2에서 마이그레이션 또는 ERB.

해결법

  1. ==============================

    1.당신은 이미 워드 클래스가 다른 곳에서 정의합니다. 나는 레일 3 응용 프로그램 내에서 시도했지만 복제 할 수 없습니다.

    당신은 이미 워드 클래스가 다른 곳에서 정의합니다. 나는 레일 3 응용 프로그램 내에서 시도했지만 복제 할 수 없습니다.

    두 번째 말씀 클래스를 직접 작성하지 않은 경우, 그것은 당신의 보석 또는 플러그인 가능성이 하나가 이미 정의입니다.

  2. ==============================

    2.이것은 또한 같은 발생할 수 있습니다 :

    이것은 또한 같은 발생할 수 있습니다 :

    # /models/document/geocoder.rb
    class Document
      module Geocoder
      end
    end
    
    # /models/document.rb
    require 'document/geocoder'
    
    class Document < ActiveRecord::Base
      include Geocoder
    end
    

    는 (다른 슈퍼 클래스가 있습니다) 문서 <액티브 :: 자료 전 (Object의 슈퍼 클래스가 있습니다)로드 문서가 필요합니다.

    나는 그것이 자동 클래스 로딩을 가지고 있기 때문에 일반적으로 필요하지 않습니다 필요 레일 환경에서 점에 유의해야한다.

  3. ==============================

    3.나는 레일 4 응용 프로그램에 문제가 있었다. 나는 사용자 공간에서 우려를 사용했다.

    나는 레일 4 응용 프로그램에 문제가 있었다. 나는 사용자 공간에서 우려를 사용했다.

    class User
      module SomeConcern
      end
    end
    

    나는 불일치 오류를 가지고 개발에 모든 벌금을 근무하지만 생산 (I 때문에 진정한 preload_app의 생각). 수정은 매우 간단했다. 난 그냥 초기화를 추가 :

    require "user"
    

    건배!

  4. ==============================

    4.지금은이 같은 문제가 없었다. 기본적으로 Word에서 클래스 다른 곳으로 정의하고, 내 생각 엔 그것이 레일 관계 보석에 있다는 것을 의미한다. 그냥 Word2에 말씀을 변경하고 튜토리얼에서 잘 작동합니다.

    지금은이 같은 문제가 없었다. 기본적으로 Word에서 클래스 다른 곳으로 정의하고, 내 생각 엔 그것이 레일 관계 보석에 있다는 것을 의미한다. 그냥 Word2에 말씀을 변경하고 튜토리얼에서 잘 작동합니다.

  5. ==============================

    5.때때로 우리없이 우리 '개방 클래스는'알고. 일부 깊은 모듈 중첩와 예를 들면 :

    때때로 우리없이 우리 '개방 클래스는'알고. 일부 깊은 모듈 중첩와 예를 들면 :

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

    우리가 트리거를 정의 할 때, 우리는 기존의 SpaceGun 클래스를 엽니 다. 이 작동합니다. 우리는 역순으로 두 개의 파일을로드 그러나 경우, 오류가 우리가 먼저 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
    

    어느 한 쪽

  6. from https://stackoverflow.com/questions/5512023/ruby-on-rails-3-superclass-mismatch-for-class by cc-by-sa and MIT license