【问题标题】:MongoMapper and NameError: uninitialized constantMongoMapper 和 NameError:未初始化的常量
【发布时间】:2013-05-28 04:30:07
【问题描述】:

我有两个模型,如下所示。 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

【问题讨论】:

    标签: ruby sinatra mongomapper


    【解决方案1】:

    原来我不能有一个名为Color 的模型。我猜这是一个保留的名字。将其更改为ShareColor 解决了这个问题。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果您不能将所有内容都放入一个文件中,那么您的项目可能对 sinatra 来说太大了。否则如上,你需要require。
      • @Lukas_Skywalker 我不知道我需要去哪里require。现在我在Share 模型中需要Color 模型,反之亦然。在api.rb 中,我都需要它们,但我得到了同样的错误。
      • @three 我想我可以将所有内容放入一个文件中,我只是更喜欢将所有内容保存在单独文件中的结构。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      相关资源
      最近更新 更多