在类中使用模块的方法

时间:2015-02-20 11:01:57

标签: ruby-on-rails api module plivo

我尝试将API集成到一个类中,但无法解决我如何放置模块的问题。

class PlivoNumber < ActiveRecord::Base
  require 'plivo'
  include Plivo 

def initialize_plivo

 @p = RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])
end

def delete_number
  self.initialize_plivo
  params = {
    'number' => self.number
  }
  response = @p.unrent_number(params)

end

我已尝试过include和Extend

如果我在初始化中使用

self.RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])

NoMethodError: undefined method `RestAPI' for #<PlivoNumber:0x007f8eca9523f0>

如果我使用

RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])

NameError: uninitialized constant PlivoNumber::RestAPI

基本上我希望能够运行@ plivo_number.delete_number并让应用程序点击api并执行操作。 我很欣赏初始化步骤并没有真正对课程做任何事情,但如果没有它,我就无法做下一步。

希望有某种意义,我得到的印象是我所做的事情可能有点困惑....

2 个答案:

答案 0 :(得分:3)

在包含RestAPI模块后,您应该能够访问Plivo课程。确保您已正确安装了plivo gem。这是您的代码的更多rubyish版本:

class PlivoNumber < ActiveRecord::Base
  include Plivo 

  def delete_number
    api.unrent_number('number' => number)
  end

  private

  def api
    @api ||= RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])
  end
end

此外,您不需要将Plivo模块包含在PlivoNumber类中,您只需使用Plivo :: RestAPI。

答案 1 :(得分:2)

只是为了解释Donatas&#39;回答一下:

如果您查看了plivo的源代码(https://github.com/plivo/plivo-ruby/blob/master/lib/plivo.rb),您会看到如下结构:

module Plivo

   (...)
   class RestAPI
      (...)
   end
   (...)
end

在这种情况下,如果您include Plivo,您将获得其中定义的所有类(包括RestAPI),就像在本地定义一样。因此,您可以直接访问它们,如Donatas&#39;代码段:

def api
  @api ||= RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])
end

正如他所提到的,您也可以在任何Ruby类中使用require Plivo,并且您可以通过其命名空间路径访问RestAPI。在控制器中,例如:

require 'plivo'

class OperationsController < ApplicationController

  def plivo
    plivo = Plivo::RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])
    ...
  end
end