1

可能是一些非常基本的东西,但我希望能够在模块化 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

我的问题也是我在个人资料课程之外需要它。这没有任何意义,因为我要求我的 ENV 变量的配置文件以相同的方式被读取,但它们又不是方法,所以我想这确实是有道理的。

我想也许我很难理解模块化应用程序是什么,而不是使用经典风格的 sinatra 应用程序。

任何指针表示赞赏

错误信息

NoMethodError at / undefined method `aws_asset' for #<Profile:0x007f1e6c4905c0> file: index.erb location: block in singletonclass line: 8
4

1 回答 1

2

当您helpers do ...像这样在顶层使用时,您将方法添加为助手Sinatra::Application不是您的Profile类。如果您只使用 Sinatra 模块化样式,请确保您只使用过require 'sinatra/base',而不是require sinatra,这将防止您像这样混淆两种样式。

在这种情况下,您可能应该为您的助手创建一个模块而不是使用helpers do ...,然后将该模块与您的类中的helpers方法一起添加。Profile

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
于 2013-06-22T16:00:20.683 回答