2014-03-12 39 views
1

我有我的路線和幫助者在外部文件中定義幷包含在Sinatra中,但是我是Ruby的新手,我現在無法弄清楚如何在我的路線中使用我的幫助器方法。當我運行在RubyMine的代碼和訪問個人資料網址我得到的錯誤「NoMethodError - 未定義的方法'保護'!」如何在包含的模塊中使用我的Sinatra助手?

## Main class 
require 'sinatra/base' 
class MyApp < Sinatra::Base 
    register Sinatra::MyHelpers 
    register ProfileRoutes 
    ... 
end 


## Helpers include 
require 'sinatra/base' 
module Sinatra 
    module LocutusHelpers 
    def self.registered(app) 

     app.before do 
     ... 
     end 

     def protected! 
     ... 
     end 

    end 
    end 
end 


## Routes include 
require 'sinatra/base' 
module ProfileRoutes 
    def self.registered(app) 

    app.get '/profile/:userid' do 
     protected! 
     ... 
    end 

    end 
end 

我試過def self.protected!的助手,但隨後它不能訪問請求對象。 我也試過Sinatra::MyHelpers.protected!Sinatra.protected!app.protected!,錯誤拋出的所有的這些也

你知道我可以從我的路由訪問傭工?或者我有不正確的設置?

回答

2

它看起來像你在混合adding helpers from extensions並從擴展配置你的應用程序。

您需要將protected!移動到模塊中,然後在註冊您的擴展時將該模塊添加爲輔助模塊。

module LocutusHelpers 
    # new module, move protected! into here 
    module HelperMethods 
    def protected! 
     ... 
    end 
    end 

    def self.registered(app) 

    # add new hlpers module 
    app.helpers HelperMethods 

    # other extension setup as before... 
    app.before do 
     ... 
    end 

    end 
end 
相關問題