2013-06-01 41 views
0

我有兩個模型,如下所示。 Share的實例可能有Color的多個實例。我正在使用MongoMapper來管理這些模型。 當我做Share.create,我發現了以下錯誤:MongoMapper和NameError:未初始化常量

NameError: uninitialized constant Color

誰能告訴我這是爲什麼?

/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 

這是我嘗試創建實例:

/路由/ 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 

回答

1

事實證明,我不能有一個名爲Color的模型。我想這是一個保留名稱。將其更改爲ShareColor解決了該問題。

0

由於您使用的是Si natra,您需要通過require聲明手動加載您使用的所有模型。 requireloads a file並執行其所有語句,但也確保相同的文件不會被加載兩次。

+0

如果你不能把所有東西都放到一個單獨的文件中,你的項目可能對sinatra來說太大了。否則如上所述,你需要。 – three

+0

@Lukas_Skywalker我找不到需要'需要'的地方。現在我已經在'Share'模型中需要'Color'模型,反之亦然。在'api.rb'我已經要求他們兩個,但我得到相同的錯誤。 – simonbs

+0

@three我想我可以把所有東西都放到一個單獨的文件中,當我把所有東西都放在單獨的文件中時,我更喜歡這個結構。 – simonbs

相關問題