2

我目前正在使用 Rack 和 Sinatra 构建一个 Ruby 应用程序,但我无法使用在主应用程序文件之外实现的路由。我的第一次尝试是这样的:

在主文件中:

require 'sinatra'
require 'lib/web'

module NoCI
  class Main < Sinatra::Base
    include NoCI::Web
    load 'lib/web.rb'
  end
end

在 lib/web.rb 中:需要 'sinatra'

module NoCI
  module Web
    get '/' do
      "Hello World"
    end
  end
end

但它没有用。然后我读到了将路线放入我的主类的子类中。也没有成功。任何提示,我错过了什么?

更新:我尝试使用“require”、“include”和“load”,混合所有可能的组合,但对我没有任何效果。

4

1 回答 1

4

你可以使用included钩子来实现你想要的。

require 'sinatra'
require 'lib/web'

module NoCI
  class Main < Sinatra::Base
    include NoCI::Web
  end
end

库/web.rb

module NoCI
  module Web
    def self.included(base)
      base.get '/' do
        'Hello World!'
      end
    end
  end
end

当你包含这个模块时,里面的代码included将执行,带有NoCI::Baseas base

于 2012-06-02T11:40:23.000 回答