可以从我的HAML代码和我的路线访问Sinatra中的所有帮助程序。但我发现自己为这两个代码编写了两组完全独立的代码。
理想情况下,我希望将它们分开。目前我将它们放在两个不同的目录中,但这似乎毫无意义。任何人都可以建议我可以限制命名空间冲突造成的潜在损害吗?
起初我以为模块。来自Sinatra自述文件:
module FooUtils
def foo(name) "#{name}foo" end
end
module BarUtils
def bar(name) "#{name}bar" end
end
helpers FooUtils, BarUtils
但实际上这样做有什么意义吗?他们不得不在我的Sinatra应用程序中共享相同的命名空间吗?
答案 0 :(得分:0)
1)以与帮助者相同的方式定义的方法但没有调用Sinatra::helpers
似乎无法从视图访问,但 可从Sinatra应用程序中访问块。那就是:
require 'sinatra'
module Sinatra
module MyThing
# Helper classes and methods go here
end
helpers MyThing # <- leave this out if you don't want access from views
end
2)您当然也可以使用MyThingHelpers
和MyThingLib
模块,而不仅仅是MyThing
,以防止命名空间冲突。
3)您可以将它们放在单独的子目录中。
我还没有确信这些代表了我的问题的全面的解决方案。我想,时间和测试会告诉我,除非有人能在这里给我一个更好的答案。