Rails 3.2 Gemified Engines:在安装的宝石引擎内部到达模块

时间:2012-08-23 11:23:29

标签: ruby-on-rails gem rails-engines

我正在为Rails应用程序开发基础架构,我正试图从某些现有项目中取出一些东西。 我对rails很新,但我阅读了关于插件和引擎的指南等。

所以我有一个gemified Engine,包含一些模块。我有一个模型说,SharedPost试图扩展所述模块,我得到未初始化的常量错误

uninitialized constant Stake::SharedPost

以下是我的引擎的一些内容:

#file: lib/stake/shared_post.rb
module Stake
  module SharedPost
    ...
  end
end

#file: lib/stake/engine.rb    
module Stake
  class Engine < ::Rails::Engine
    isolate_namespace Stake

  end
end

在主应用程序中我有

#file: Gemfile
...
gem 'stake'
...

#file: config/routes.rb
Pop::Application.routes.draw do
  root :to => 'home#index'

  mount Stake::Engine, :at => '/stake'
end

#file: app/models/posted.rb
class Posted < ActiveRecord::Base
  extend Stake::SharedPost
    ...
  end
end

主应用程序将加载,但没有可用的数据。 我试着跑

rake db:seed

例如,在尝试加载已发布的模型时,我收到错误uninitialized constant Stake::SharedPost

访问我的gem的命名空间模块我错过了什么?

编辑: 我已经阅读了acts_as模式,这似乎不是最干净的做事方式,而且我不确定如何在我的引擎上实现它。还有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

lib/stake.rb中,您是否包含lib/stake/shared_post.rb文件?

看起来应该是这样的:

# file lib/stake.rb

require "stake/shared_post.rb"

module stake
    ....
end