如何从模块内的其他文件访问方法?

时间:2016-07-19 10:46:21

标签: ruby sinatra

这是我正在研究的S​​inatra API项目的粗略结构:

  • api.rb(不同API端点上的主程序调用方法。这也是层次结构的项目根级别)
  • 方法/ V1 / auth.rb
  • LIB / api_helpers.rb

文件auth.rb包含以下结构的代码:

module V1
   require './lib/api_helpers'
end

module V1::Auth

 def register
  do_something #a method defined in api_helpers.rb
 end

end

api_helpers.rb的相关部分:

helpers do 
    def do_something
      #lots of blah
    end
end

api.rb中的/ register端点调用V1::Auth.register,该文件被调用而不会引发所需的api_helpers.rb文件的LoadError ,但会抛出{{1调用undefined method时出错。

我如何在这样的命名空间结构中工作,并能够从层次结构中其他位置的文件访问方法?

使用Ruby 2.3.1

1 个答案:

答案 0 :(得分:0)

在这种情况下,方法Auth::user()->articles()->save(new Article($request->all())); 是一个实例方法,所以如果你想像register那样调用它,你必须将其设置为类方法。

修改 您必须将V1::Auth.register添加到do_something模块才能直接调用它。

<强> api_helpers.rb

V1::Auth

<强> api.rb

def do_something
  puts "I do something"
end