Ruby on rails 使用模块';类中的方法

Ruby on rails 使用模块';类中的方法,ruby-on-rails,api,module,plivo,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

我试图将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
基本上,我希望能够运行@plivo_number.delete_number,让应用程序点击api并执行操作。 我很欣赏初始化步骤并没有真正对类做任何事情,但没有它我就无法进行下一步


希望这有点道理,我的感觉是我正在做的事情可能有点混乱….

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

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
类PlivoNumbernumber)
结束
私有的
def api
@api | |=RestAPI.new(ENV['PLIVO_AUTH_ID'],ENV['PLIVO_AUTH_TOKEN']))
结束
结束

另外,您不需要将Plivo模块包含到PlivoNumber类中,您只需使用Plivo::RestAPI即可。

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

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
类PlivoNumbernumber)
结束
私有的
def api
@api | |=RestAPI.new(ENV['PLIVO_AUTH_ID'],ENV['PLIVO_AUTH_TOKEN']))
结束
结束

另外,您不需要将Plivo模块包含到PlivoNumber类中,您只需使用Plivo::RestAPI即可。

只是为了进一步解释Donatas的答案:

如果检查plivo的源代码(),您将看到如下结构:

module Plivo

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

在这个场景中,如果您
包含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
需要“plivo”
类操作控制器<应用程序控制器
德夫普利沃
plivo=plivo::RestAPI.new(ENV['plivo\u AUTH\u ID',ENV['plivo\u AUTH\u TOKEN']))
...
结束
结束

为了进一步解释Donatas的回答:

如果检查plivo的源代码(),您将看到如下结构:

module Plivo

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

在这个场景中,如果您
包含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
需要“plivo”
类操作控制器<应用程序控制器
德夫普利沃
plivo=plivo::RestAPI.new(ENV['plivo\u AUTH\u ID',ENV['plivo\u AUTH\u TOKEN']))
...
结束
结束

感谢您的澄清。您可以使用Gemfile中定义的gems,而无需显式要求它们,Bundler会自动执行此操作。我正在尝试此操作,但@p(或您示例中的@api)最终返回nil,即使它似乎已正确验证。因此,当我运行@p.get_numbers()(一个plivo列表方法)时,我会得到一个未定义的方法errorOk。只要我把所有的东西都放在一种方法里,那么我们就好了。i、 e.我在同一方法内初始化并执行api调用。不确定我在尝试什么,但我有点希望@p在控制台中持久化,这样我就可以重用它了。我想这可能是我的愚蠢。谢谢你的澄清。您可以使用Gemfile中定义的gems,而无需显式要求它们,Bundler会自动执行此操作。我正在尝试此操作,但@p(或您示例中的@api)最终返回nil,即使它似乎已正确验证。因此,当我运行@p.get_numbers()(一个plivo列表方法)时,我会得到一个未定义的方法errorOk。只要我把所有东西都放在一个方法里,我们就好了。i、 e.我在同一方法内初始化并执行api调用。不确定我在尝试什么,但我有点希望@p在控制台中持久化,这样我就可以重用它了。我想这可能是我的愚蠢。