如何在Sinatra组织模特?

时间:2011-07-20 18:14:27

标签: ruby-on-rails ruby sinatra models rack

我在Sinatra项目中有一个可靠的组织模型。

假设我有2个模型:PostComment,nn Post模型,我必须调用Comment模型。现在我有<class:Post>': uninitialized constant Comment (NameError)

我知道在订购模型需求时存在问题,但如果我有很多模型呢?什么是Rails方式需要模型等?

更新

我在Sinatra / Rack / Grape应用程序中将此代码用于auto_load我的模型。此代码应位于代码的顶部,即引导文件中。

models = File.join(File.dirname(__FILE__), 'app', 'models') # path to your models
$LOAD_PATH << File.expand_path(models)

# Constent Missing for requiring models files
def Object.const_missing(const)
    require const.to_s.underscore
    klass = const_get(const)
    return klass if klass
end

3 个答案:

答案 0 :(得分:4)

您应该将所有模型放在应用程序中的lib文件夹中,然后将其添加到Sinatra应用程序文件的顶部:

$: << File.dirname(__FILE__) + "/lib" # Assuming app.rb is at the same level as lib

require 'post'
require 'comment'

您应该组织代码,以便在加载所有模型声明之前不要调用其他模型。

答案 1 :(得分:3)

Rails方式基于一个非常好的Ruby特性:const_missing。您可以编写const_missing方法或在Web上查找const_missing和sinatra的解决方案。

答案 2 :(得分:0)

我尝试这个时没有问题

评论是否在Post的方法中不应该实际评估 必须有一些情况触发NameError

不要在类声明的主体中调用Post 根据第一个评论者的建议加载所有模型文件

不应该像Java本身一样具有相同的参考麻烦 在像Ruby这样的动态语言中