0

我正在使用这两个 gem:social_stream(rails 引擎)和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_paranoidmodule 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 回答