2013-06-22 88 views
1

可能是相當基本的東西,但我希望能夠在模塊化Sinatra應用程序中使用一些自定義幫助程序方法。我在./helpers/aws_helper.rb以下NoMethodError Sinatra模塊化應用程序

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 
+0

你真的錯過你'require'行的結尾撇號?什麼是你收到的實際的完整錯誤信息? – Casper

+0

不,這是一個錯字,已經修改,我也添加了我得到的錯誤 – Richlewis

回答

2

當您在頂層使用helpers do ...這樣你添加的方法作爲助手Sinatra::ApplicationProfile類。如果您正在使用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 
相關問題