MongoMapper和NameError:未初始化的常量

时间:2013-06-01 12:31:13

标签: ruby sinatra mongomapper

我有两个模型,如下所示。 Share的实例可能包含Color的多个实例。我正在使用MongoMapper来管理这些模型。 当我Share.create时,我收到以下错误:

  

NameError:未初始化的常量颜色

谁能告诉我为什么会这样?

/models/share.rb:

class Share
  include MongoMapper::Document

  key :shorten_id, String
  key :name, String
  many :colors, :class_name => "Color"
  timestamps!
end

/models/color.rb:

class Color
   include MongoMapper::Document

   key :celcius, Float
   key :hue, Float
   key :saturation, Float
   key :brightness, Float
   belongs_to :share, :class_name => "Share"
   timestamps!
end

这是我尝试创建实例的地方:

/routes/api.rb:

require 'json'

class App < Sinatra::Base
  register Sinatra::Namespace

  namespace '/api' do
    before do
      protected!
    end

    get '/shares' do
      content_type 'application/json'
      Share.all.to_json
    end

    post '/share' do
      @share = Share.create
      @share.save
    end
  end
end

2 个答案:

答案 0 :(得分:1)

事实证明我没有名为Color的模型。我想这是一个保留的名字。将其更改为ShareColor解决了问题。

答案 1 :(得分:0)

由于您使用的是Sinatra,因此需要通过require语句手动加载您手动使用的所有模型。 require loads a file并执行其所有语句,但也确保同一文件未加载两次。