0

私はこれらの2つのgemを使用しています:social_stream(rails engine)とrails3_acts_as_paranoid(lib)。

ホームページを見ようとすると、次のエラーが発生します。

NameError in Home#index

/home/pinouchon/code/sharewizz/webapp/app/views/home/index.html.erbを表示しています。ここで、行#25が​​発生しています: 初期化されていない定数ActsAsParanoid :: Relation :: Public 抽出されたソース(行#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'
# ...

それらのgemによって定義された2つのモジュールが同じ名前を共有しているためだと思います:Relation

/home/pinouchon/.rvm/gems/ruby-1.9.3-p392@project/gems/rails3_acts_as_paranoid-0.2.5/lib/acts_as_paranoid/relation.rb:

module ActsAsParanoid
  module Relation
  # ...

/home/pinouchon/.rvm/gems/ruby-1.9.3-p392@project/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/ruby-1.9.3-p392@project/gems/social_stream-base-0.21.0/app/models/relation/public.rb:

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

以前は、ソーシャルストリームのみを使用していましたが、モジュール名が競合することはありませんでした。さて、それはあたかもActsAsParanoid::Relation置き換えているかのようRelationであり、したがって.../social_stream/.../relation.rb159行目の問題です。

しかし、驚くべきことは、のRelationモジュールがrails3_acts_as_paranoidでうまく名前空間化されていることmodule ActsAsParanoidです。したがってRelation、グローバルスコープで定義されたsocial_streamに干渉することはありませんが、干渉することはあります。私はおそらく何かが欠けています。

エラーの原因について私は正しいですか?それを修正する方法はありますか?

4

1 に答える 1

0

social_stream で定義されたモデル リレーションを上書きし (ファイルを app/models にコピー)、159 行目を次のように変更します。

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

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

すべて正常に動作します。ここでグローバルスコープを使用するように明示的に指定する必要がある理由がわかりません。私はまだ説明やより良い答えを受け入れています。

于 2013-03-22T10:52:04.890 に答える