可能是非常基本的东西,但我希望能够在模块化的Sinatra应用程序中使用一些自定义帮助器方法。我在./helpers/aws_helper.rb
中有以下内容helpers do
def aws_asset( path )
File.join settings.asset_host, path
end
end
然后在我看来我希望能够像这样使用这种方法
<%= image_tag(aws_asset('/assets/images/wd.png')) %>
但是我得到了上面的区域,所以在我的app.rb文件中我是
require './helpers/aws_helper'
class Profile < Sinatra::Base
get '/' do
erb :index
end
end
我的问题是,我需要在我的Profile类之外。这是没有意义的,因为我要求ENV变量的配置文件以相同的方式正在读取它们,但是再次它们不是方法所以我想这确实有意义。
我想也许我正在努力解决模块化应用程序的问题,而不是使用经典风格的sinatra应用程序。
赞赏任何指针
错误消息
NoMethodError at / undefined method `aws_asset' for #<Profile:0x007f1e6c4905c0> file: index.erb location: block in singletonclass line: 8
答案 0 :(得分:2)
当你在这个顶层使用helpers do ...
时,你将这些方法作为助手添加到Sinatra::Application
和而不是你的Profile
类。如果您只使用Sinatra模块化样式,请确保只使用require 'sinatra/base'
而不是require sinatra
,这样可以防止您混淆这两种样式。
在这种情况下,您可能应该为助手创建一个模块,而不是使用helpers do ...
,然后在Profile
类中添加helpers
method的模块。
在helpers/aws_helper.rb
:
module MyHelpers # choose a better name of course
def aws_asset( path )
File.join settings.asset_host, path
end
end
在app.rb
:
class Profile < Sinatra::Base
helpers MyHelpers # include your helpers here
get '/' do
erb :index
end
end