0

我正在使用這兩個寶石:social_stream(rails引擎)和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哪裏線#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: 

完整跟蹤:

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' 
# ... 

我想這是因爲那些寶石定義2個模塊共享同一個名字:Relation

在/home/pinouchon/.rvm/gems/[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 
    # ... 

之前,我只使用社會流,沒有沒有衝突的模塊名稱。現在,這是因爲如果在ActsAsParanoid::Relation.../social_stream/.../relation.rb正在取代Relation,因此問題159

但是,什麼是令人驚訝的是,rails3_acts_as_paranoid關係模塊是很好的命名空間中module ActsAsParanoid。所以它不應該干擾在全球範圍內定義的social_stream的Relation,但它是。我可能錯過了一些東西。

我對錯是什麼原因嗎? 有什麼方法可以解決這個問題嗎?

回答

0

通過覆蓋由social_stream定義的模型關係(將文件複製到應用程序/型號),並改變線路159:

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

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

,一切工作正常。我不知道爲什麼我必須明確指定在這裏使用全局範圍。我仍然接受解釋或更好的答案。