在辛纳屈/帕德里诺,哪里是增加常量供路线内部使用的合理地方?
我使用Padrino来挂载多个应用程序,所以我希望所有应用程序都可以使用常量。(所有应用程序都是从基类继承的。)
我使用Sinatra.helpers来添加用于内部路由的方法。
我希望对常量也有类似的处理方法。
更新
这似乎是一个范围界定的问题,但我不知道在这种情况下出了什么问题。
下面是一个精简的padrino应用程序,它演示了这个问题:
app.rb
class MyProject < Padrino::Application
register Padrino::Rendering
register Padrino::Mailer
register Padrino::Helpers
MY_CONST = 123
endcontrollers.rb
MyProject.controller do
get "/" do
p self.class # => MyProject
p self.class.constants # => [:DATA_ATTRIBUTES, ... <snip>..., :MY_CONST, ... <snip>... ]
p MyProject::MY_CONST # => 123
p MY_CONST # => NameError - uninitialized constant MY_CONST
end
end发布于 2012-09-24 07:52:31
好的,很明显,我遇到了一个问题,就是Ruby如何处理instance_evaled程序中的常量查找。
下面是一种不使用Padrino的方法来重新创建错误:
class Thing
MY_CONST = 123
def doStuff (&block)
p "doStuff: #{self.class}" # => "doStuff: Thing"
p "doStuff: #{MY_CONST}" # => "doStuff: 123"
instance_eval &block
end
def doOtherStuff (&block)
p "doOtherStuff: #{self.class}" # => "doOtherStuff: Thing"
p "doOtherStuff: #{MY_CONST}" # => "doOtherStuff: 123"
yield
end
end
t = Thing.new
t.doStuff do
doOtherStuff do
p self.class # => Thing
p self.class.constants # => [:MY_CONST]
p Thing::MY_CONST # => 123
p MY_CONST # => NameError: uninitialized constant MY_CONST
end
end相关问题:Ruby1.9中的eval
相关博客文章:http://jfire.io/blog/2011/01/21/making-sense-of-constant-lookup-in-ruby/
因此,我的选择似乎仅限于:
发布于 2012-09-19 15:12:52
嗯,也许我不明白,但你可以用apps.rb
Padrino.configure do
set :foo, :bar
end那么您应该能够在您的所有应用程序中检索您的var。
或者在引导或apps.rb中添加一些类似的内容:
MY_CONST = 1
MyConst = 1https://stackoverflow.com/questions/12492167
复制相似问题