我的主要Sinatra project_name.rb中有很多助手,我想将它们删除到外部文件中,最好的做法是什么?
来自 ./preject_name.rb
helpers do
...#bunch of helpers
end
以示例 ./helpers / something.rb
谢谢
答案 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的答案对我不起作用。