使用Gem共享模型时未初始化的常量

时间:2014-01-24 09:56:38

标签: ruby ruby-on-rails-3 model gem

在尝试查看我的应用上的页面时,我一直收到“未初始化的常量”错误,这是因为将我的模型捆绑到一个gem并在两个应用之间共享我的数据库..就像模型没有加载?

所以我的应用程序路由到'pages#index,这里是控制器

 class PagesController < ApplicationController

 def index
  @portfolios = Portfolio.all
 end

 end

美好而简单。所以我得到的错误信息是

uninitialized constant PagesController::Portfolio

我的database.yml文件我已将应用程序指向第二个应用程序开发数据库

database: myblog_development 

我在gem中加载我的模型,#blogModels.rb文件

require "blogModels/version"

module BlogModels

 Gem.find_files("models/*.rb").each do |f| 
 filename = File.basename(f, '.*')
 class_name_symbol = filename.classify.to_sym
 autoload class_name_symbol, "models/#{filename}"
end

end

我的宝石结构

-blogModels
  -lib
    -blogModels
      -version.rb
    -models
      -portfolio.rb
      -sector.rb
  -blogModels.rb

我的投资组合模型在我的宝石

中设置如下
class Portfolio < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged

has_many :portfolio_sectors
has_many :sectors, through: :portfolio_sectors
has_many :images, as: :imageable, :dependent => :destroy

accepts_nested_attributes_for :images
attr_accessible :overview, :title, :url, :sector_ids, :image_id, :images_attributes

#Validations
validates :title, :presence => {:message => 'Add your Title'}
validates :url, :presence => {:message => 'Add a URL'}
validates :overview, :presence => {:message => 'Add an Overview'}
validates :sector_ids, :presence => {:message => 'Choose At Least 1 Sector'}


def previous_post
 self.class.first(:conditions => ["title < ?", title], :order => "title desc")
end

 def next_post
  self.class.first(:conditions => ["title > ?", title], :order => "title asc")
 end

end

我不知道怎么调试这个,所以如果有人有任何指示,请告知。我很困惑为什么这不起作用。

1 个答案:

答案 0 :(得分:2)

  1. 确保您的gem在Gemfile中并且您已重新启动服务器
  2. 您需要要求包含模型的文件
  3. 如果您仍然遇到问题,请检查::Portfolio是否适合您
  4. 根据经验,当您将模型(或一般类)移动到gem中时,将它们放在命名空间模块中并通过MyGemName::Portfolio
  5. 引用您的类

    编辑:

    由于您在不同项目之间共享模型,因此将模型分组到模块中是有意义的

    module MyAwesomeModels
      class Portfolio < ActiveRecord::Base
        # self.table_name = 'portfolios' # if you face issues accessing the tables, this might help
      end
    end