外部文件中的sinatra助手

时间:2011-08-02 18:16:17

标签: sinatra

我的主要Sinatra project_name.rb中有很多助手,我想将它们删除到外部文件中,最好的做法是什么?

来自 ./preject_name.rb

   helpers do
     ...#bunch of helpers
   end

以示例 ./helpers / something.rb

谢谢

5 个答案:

答案 0 :(得分:28)

简单而推荐的方式:

module ApplicationHelper

# methods

end

class Main < Sinatra::Base

  helpers ApplicationHelper

end

答案 1 :(得分:14)

唉,如果和我一样,你正在构建一个模块化 Sinatra应用程序,它比将helpers移到另一个文件中要复杂得多。

我让这个工作的唯一方法如下。

首先在你的应用中(我会称之为my_modular_app.rb

require 'sinatra/base'
require 'sinatra/some_helpers'

class MyModularApp < Sinatra::Base
  helpers Sinatra::SomeHelpers

  ...

end

然后创建文件夹结构./lib/sinatra/并创建some_helpers.rb,如下所示:

require 'sinatra/base'

module Sinatra
  module SomeHelpers

    def help_me_world
      logger.debug "hello from a helper"
    end

  end

  helpers SomeHelpers

end

这样做可以简单地将所有助手分成多个文件,从而在更大的项目中更加清晰。

答案 2 :(得分:8)

正如你自己说的那样:

helpers块移动到另一个文件中,并require将其移动到您需要的位置。

#helpers.rb
helpers do
...
end

#project_name.rb
require 'path/to/helpers.rb'

答案 3 :(得分:2)

似乎@DaveSag提供的答案错过了一些东西。应该在my_modular_app.rb的开头添加一行:

$:.unshift File.expand_path('../lib', __FILE__)  # add ./lib to $LOAD_PATH

require 'sinatra/base'
require 'sinatra/some_helpers' # this line breaks unless line 1 is added.

# more code below...

此外,如果有人喜欢像我这样的“古典风格”,以下是给你的:)

app.rb

$:.unshift File.expand_path('../lib', __FILE__)

require 'sinatra'
require 'sinatra/some_helpers'

get '/' do
  hello_world
end

lib / sinatra / some_helpers.rb

module Sinatra
  module SomeHelper
    def hello_world
      "Hello World from Helper!!"
    end
  end

  helpers SomeHelper
end

答案 4 :(得分:0)

我刚刚将require_relative './lib/sinatra/helpers'添加到了config.ru中,就这些。

所以看起来像这样:

require_relative './config/environment'
require_relative './lib/sinatra/helpers'
use ProjectsController
run ApplicationController

,我的./lib/sinatra/helpers.rb文件甚至都不是模块,并且我不使用任何要求或包含。我可以直接在此文件中定义方法,并在整个应用程序中使用它们。

@kgpdeveloper的答案对我不起作用。