在Sinatra中是否有办法分离在路径中使用的视图和助手中使用的助手?

时间:2014-11-27 15:13:39

标签: ruby sinatra

可以从我的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应用程序中共享相同的命名空间吗?

1 个答案:

答案 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)您当然也可以使用MyThingHelpersMyThingLib模块,而不仅仅是MyThing,以防止命名空间冲突。

3)您可以将它们放在单独的子目录中。

我还没有确信这些代表了我的问题的全面的解决方案。我想,时间和测试会告诉我,除非有人能在这里给我一个更好的答案。

相关问题