获得"未初始化的常数"从控制器调用方法时出错,但不是通过控制台

时间:2015-10-20 17:43:53

标签: ruby-on-rails ruby ruby-on-rails-4 tiny-tds

[Rails 4]你好。我正在创建一个webapp。这是使用Rails 4.此外,该项目不使用ActiveRelations或数据库。然而,它正在使用一个预先存在的M $ _SQL DB,我使用一个名为tiny_tds的gem查询。

我遇到了一个错误,我已经陷入困境。

基本上,我的模型是"网络"看起来像这样的类:

应用/模型/ network.rb

class Network

include Query #THIS IS MY CONCERN MODULE (SHOWN BELOW)

include ActiveModel::Conversion
include ActiveModel::Validations
extend  ActiveModel::Naming

...

def initialize()
    @technology = "CDMA"
    @sites      = []
end

...

def get_sites()
    #Custom query - this calls the Query Module
    @sites = Query.query_avg(@technology, @s_range, @e_range)

end

...

end

这个类调用我创建的模块并卡在/ concerns文件夹中。它依赖于" tiny_tds" gem,这是一个用于查询M $ _SQL DB的gem。在我尝试将它与rails集成之前,它的效果非常好:

应用/模型/关切/ query.rb

module Query

extend ActiveSupport::Concern

def self.query_avg(tech, s_date, e_date)

    q_string = "..." #custom sql string (omitted for brevity)

    return execute(q_string) #return to calling class

end

private

    def self.execute(sql)

        #This is a TinyTds Specific command (where error is seen)
        client = TinyTds::Client.new(username: '...', password: '...', host: 'x.x.x.x')
        result = client.execute(sql)
        results = result.each(:symbolize_keys => true, :as => :array, :cache_rows => true, :empty_sets => true) do |rowset| end

        return results
    end

end

最后但并非最不重要的是,这是控制器调用代码:

应用/控制器/ networks_controller.rb

class NetworksController < ApplicationController
  def new
    @network = Network.new
    d1 = Date.new(2014,11,22)
    d2 = Date.new(2014,11,30)
    @network.date_range(d1,d2)
    @network.get_sites
end

现在......上面的代码(在控制器中)在我加载&#34; rails console&#34;然后我手动输入它。所有数据都是我想要的。

但是,当我尝试调用http://localhost:3000/networks/new时(即使是空视图)我在浏览器中收到以下错误:

uninitialized constant Query::TinyTds

...(inside the query.rb module listed above)...

client = TinyTds::Client.new(username: '...', password: '...', host: 'x.x.x.x')

PS。我安装了bundle install并验证了tiny_tds gem的安装。

感谢所有帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

添加新gem后,您始终需要重新启动服务器。 Gems在应用程序启动时加载,不是自动加载的主题。