Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Can';从gem(Twilio ruby)调用方法,似乎在我的控制器中查找,如何正确地确定范围?_Ruby On Rails_Ruby_Twilio - Fatal编程技术网

Ruby on rails Can';从gem(Twilio ruby)调用方法,似乎在我的控制器中查找,如何正确地确定范围?

Ruby on rails Can';从gem(Twilio ruby)调用方法,似乎在我的控制器中查找,如何正确地确定范围?,ruby-on-rails,ruby,twilio,Ruby On Rails,Ruby,Twilio,我的GEM文件中有以下行,并且已经完成了捆绑包安装: gem 'twilio-ruby' 我有以下基于twilio ruby gem示例的代码: class TwilioEntriesController < ApplicationController def process_message # init client @account_sid = 'REMOVED' @auth_token = 'REMOVED' @from_number =

我的GEM文件中有以下行,并且已经完成了
捆绑包安装

gem 'twilio-ruby'
我有以下基于twilio ruby gem示例的代码:

class TwilioEntriesController < ApplicationController

  def process_message

    # init client 
    @account_sid = 'REMOVED'
    @auth_token = 'REMOVED'
    @from_number = '+14159675278'

    @client = Twilio::REST::Client.new(@account_sid, @auth_token)

    # send response
    @client.account.sms.messages.create(
      :from => @from_number,
      :to => '+REMOVED',
      :body => 'Hey there!'
    )

    render :result, :layout => ''
  end  

end
Ruby似乎正在“TwilioEntriesController”中寻找“Twilio”类,这就是调用的来源。它应该从正确的类(“Twilio”)调用该方法-给出了什么


我如何调用Twilio ruby文档中描述的Twilio类上的静态方法?

这肯定是由于Twilio gem没有被正确地要求造成的。仔细检查
捆绑包列表
是否包含twilio ruby,以及在rails应用程序中是否正确设置了捆绑包。

请尝试第10行的
::twilio


这就像从根(/foo/bar)调用模块和类的绝对路径。

当查找一个常量时,Ruby将遍历
模块。嵌套
,在您的例子中是
[TwilioEntriesController]
。对于每个条目,它将搜索:

  • 在模块本身中
  • 在该条目中包含的模块中(递归进行)
  • 对于类,在超类中(也递归进行)
  • 如果在任何地方都找不到该模块,将引发异常,并在异常消息中使用它用于搜索的第一个模块。因此,您的错误还意味着顶层没有Twilio常量,可能是因为缺少对
    require
    的调用


    (Ruby中没有静态方法;只有实例和类方法,后者也可以视为实例方法,这取决于您的观点。)

    我已经有一段时间没有构建Rails应用程序了,但我认为您可以通过

    require 'twilio-ruby'
    

    在控制器文件的顶部。在现代Rails应用程序中,可能有一个更合适的中心位置来放置您的所有需求,尽管如此,请查阅文档以了解正确的方式。

    为时已晚,但最近遇到了相同的错误。 将此添加到您的文件:

    require 'rubygems'
    require 'twilio-ruby'
    

    Adding::给出了更好的响应:
    未初始化的常量Twilio
    ,似乎没有正确地包含gem。。。如果我添加'require twilio ruby',我就不会加载这样的文件--twilio ruby。。宝石会被打碎吗?必须重新启动rails服务器以获取对Gemfile的更改。请确保在修改Gem文件后重新启动服务器(rails s),否则rails s将看不到您的Gem文件更改-这是我的问题。@Tronathan:哇,我真不敢相信我忘了这么做+1.
    require 'rubygems'
    require 'twilio-ruby'