0

social_stream (레일 엔진)과 rails3_acts_as_paranoid (lib)의 두 개의 보석을 사용하고 있습니다.여러 개의 보석을 사용할 때 충돌하는 모듈 이름 (내 경우 social_stream 및 rails3_acts_as_paranoid)

NameError in Home#index 

/home/pinouchon/code/sharewizz/webapp/app/views/home/index.html.erb 곳에 표시 : I는 홈페이지를 참조 할 때

, 나는 다음과 같은 오류가 라인 # 25 제기 : 초기화되지 않은 상수 ActsAsParanoid :: 관계 :: 공중을 추출 소스 (라인 # 25 정도) :

22: 
23: <%= 
24:  render :partial => "activities/index", 
25:   :locals => { :activities => current_subject.wall(:home).page(params[:page]), 
26:        :owner => current_subject } 
27: %> 
28: 

전체 추적 : Relation :

social_stream-base (0.21.0) app/models/relation.rb:159:in `ids_shared_with' 
app/models/activity.rb:70:in `block in <class:Activity>' 
activerecord (3.2.2) lib/active_record/scoping/named.rb:180:in `call' 
activerecord (3.2.2) lib/active_record/scoping/named.rb:180:in `block (2 levels) in scope' 
# ... 

나는 그 보석에 의해 정의 된 두 모듈이 동일한 이름을 공유 있기 때문에 생각합니다. /home/pinouchon/.rvm/gems/ruby-1.9.3-p39[email protected]/gems/rails3_acts_as_paranoid-0.2.5/lib/acts_as_paranoid/relation.rb에서

:

module ActsAsParanoid 
    module Relation 
    # ... 

/home/pinouchon/.rvm/gems/[email protected]/gems/social_stream-base-0.21.0/app/models/relation.rb에서 :

class Relation < ActiveRecord::Base 
    #... 
    def ids_shared_with(subject) 
     # line 159: 
     ids = [Relation::Public.instance.id] 
     # ... 

에서 /home/pinouchon/.rvm/gems/[email protected]/gems/social_s tream 기반-0.21.0/응용 프로그램/모델/관계/public.rb : 전

class Relation::Public < Relation::Single 
    # ... 

, 나는 단지 소셜 스트림을 사용했는데, 아무 충돌하는 모듈의 이름은 없었다. 지금, 그것은 .../social_stream/.../relation.rb 라인, 따라서 문제를 Relation를 대체 ActsAsParanoid::Relation 것처럼입니다 159

그러나 rails3_acts_as_paranoid의 관계 모듈이 잘 module ActsAsParanoid에 네임 스페이스 것이 무엇인지 놀라운 일입니다. 따라서 전역 범위에 정의 된 social_stream의 Relation을 방해해서는 안됩니다. 아마도 뭔가를 놓친 것 같습니다.

오류의 원인은 무엇입니까? 해결할 수있는 방법이 있습니까? 라인 159 social_stream에 의해 정의 된 모델 관계 (응용 프로그램/모델에 파일을 복사)을 덮어 및 변경하여

답변

0

:

ids = [Relation::Public.instance.id] 

모든

ids = [::Relation::Public.instance.id] 

에 잘 작동합니다. 왜 전역 범위를 사용하도록 명시 적으로 지정해야하는지 잘 모르겠습니다. 나는 아직도 설명이나 더 나은 대답에 열려있다.