0

我正在尝试将 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

我已经尝试过包含和扩展

如果我在初始化中使用

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 并执行操作。我很欣赏初始化步骤并没有真正对课程做任何事情,但是没有它我就无法进行下一步。

希望这有某种意义,我的印象是我正在做的事情可能有点困惑......

4

2 回答 2

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 代替。

于 2015-02-20T11:20:00.363 回答
2

只是为了进一步解释多纳塔斯的回答:

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

module Plivo

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

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

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

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

require 'plivo'

class OperationsController < ApplicationController

  def plivo
    plivo = Plivo::RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])
    ...
  end
end
于 2015-02-20T11:35:45.300 回答