2012-07-31 49 views
4

我有一个模块化的Sinatra应用程序。我在我的配置块中设置了一些自定义变量,并想在我的模型中访问这些设置。从模型访问Sinatra设置

问题是,当我尝试从MyModel访问我的自定义设置时,我得到一个NoMethodError。标准设置似乎仍然工作正常。我该如何做这项工作?

# app.rb 
require_relative 'models/document' 

class App < Sinatra::Base 
    configure do 
    set :resource_path, '/xfiles/i_want_to_believe' 
    end 

    get '/' do 
    @model = MyModel.new 
    haml :index 
    end 
end 

# models/my_model.rb 
class MyModel 
    def initialize 
    do_it 
    end 
    def do_it 
    ... 
    settings.resource_path # no method error 
    ... 
    settings.root # works fine 
    end 
end 
+4

访问它为什么在设置作为参数没有通过?这似乎是在模型中直接引用'设置'的问题分离的问题。 – 2012-07-31 12:47:25

+0

这是一个公平点。该设置是一个路径,指向应用程序资源(模型包装这些文件)。我想要一些类似rails的方法,所以我可以去'@m = MyModel.find“name_of_resource”'并让它工作。我宁愿不使用'MyModel.find“name_of_resource”,settings.resource_path'。我宁愿将find方法作为模型的一部分,而不是帮助器。也许我在这里与Sinatra战斗...... – Soup 2012-07-31 12:59:44

+2

+1作为参数传递它。它可以做的最不容易的事情就是简化'do_it'方法的测试。 – 2012-07-31 13:15:14

回答

2

我落得这样做:

#document.rb 
class Document 
    def self.documents_path=(path) 
    @documents_path = path 
    end 
    def self.documents_path 
    @documents_path 
    end 
    ... 
end 

#app.rb 
configure do 
    set :documents_path, settings.root + "/../documents/" 
    Document.documents_path = settings.documents_path 
end 

然后只用Document.documents_path我的查找方法里面。

9

我认为你应该能够通过

Sinatra::Application.settings.documents_path 
+0

您的答案被标记为低质量帖子,因为您的答案只包含一行。有些访问者想知道更多关于解决方案的细节。 – reporter 2014-09-03 12:56:46