我尝试将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并执行操作。 我很欣赏初始化步骤并没有真正对课程做任何事情,但如果没有它,我就无法做下一步。
希望有某种意义,我得到的印象是我所做的事情可能有点困惑....
答案 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