我试图将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并执行操作。我理解初始化步骤实际上并没有对类做任何事情,但是没有它我就无法完成下一步。
希望这有点道理,我的印象是我所做的可能有点混乱.
发布于 2015-02-20 11:20:00
在包含了RestAPI
模块之后,您应该能够访问Plivo
类。确保您已经正确安装了plivo。下面是您的代码的更规则的版本:
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-20 11:35:45
为了进一步解释多纳塔斯的回答:
如果您查看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
正如他所提到的,您也可以在任何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
https://stackoverflow.com/questions/28627408
复制相似问题