首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在类中使用模块的方法

在类中使用模块的方法
EN

Stack Overflow用户
提问于 2015-02-20 11:01:56
回答 2查看 392关注 0票数 0

我试图将API集成到类中,但无法确定如何将模块放在适当的位置。

代码语言:javascript
运行
复制
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

我已经尝试过包含和扩展

如果我在初始化中使用

代码语言:javascript
运行
复制
self.RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])

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

如果我用

代码语言:javascript
运行
复制
RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])

NameError: uninitialized constant PlivoNumber::RestAPI

基本上,我希望能够运行@plivo_number.delete_number,让应用程序点击api并执行操作。我理解初始化步骤实际上并没有对类做任何事情,但是没有它我就无法完成下一步。

希望这有点道理,我的印象是我所做的可能有点混乱.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-20 11:20:00

在包含了RestAPI模块之后,您应该能够访问Plivo类。确保您已经正确安装了plivo。下面是您的代码的更规则的版本:

代码语言:javascript
运行
复制
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即可。

票数 3
EN

Stack Overflow用户

发布于 2015-02-20 11:35:45

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

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

代码语言:javascript
运行
复制
module Plivo

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

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

代码语言:javascript
运行
复制
def api
  @api ||= RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])
end

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

代码语言:javascript
运行
复制
require 'plivo'

class OperationsController < ApplicationController

  def plivo
    plivo = Plivo::RestAPI.new(ENV['PLIVO_AUTH_ID'], ENV['PLIVO_AUTH_TOKEN'])
    ...
  end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28627408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档