1

我的控制器中有以下内容:

class SurveysController < ApplicationController

  def index
    survey_provider = FluidSurveysProviders::SurveyProvider.new
    contact_lists = survey_provider.get_lists()
    @survey = Survey.new(contact_lists)
  end

我收到了这个错误:

NameError in SurveysController#index
uninitialized constant SurveysController::FluidSurveysProviders

对不起,我的 Rails 菜鸟,我确定我在这里遗漏了一些重要的东西。但在我看来,我正在尝试用这一行“初始化”常量:

survey_provider = FluidSurveysProviders::SurveyProvider.new

但这与由于未初始化而引发错误的同一行。我应该在哪里“初始化”提供者?

4

3 回答 3

1

一旦你require fluid_surveys_providers(或类似的)然后这样做:

include FluidSurveysProviders

于 2013-11-06T17:28:38.577 回答
0

确保 SurveyProvider 使用模块 FluidSurveysProviders 包装。它可能看起来像这样

module FluidSurveysProviders
  class SurveyProvider
    ...
  end
end

如果它是一个 ActiveRecord 对象试试这个

class FluidSurveysProviders::SurveyProvider < ActiveRecord::Base
  ...
end
于 2013-11-06T21:02:47.257 回答
0

SurveyProvider正确加载。

  1. 为了快速修复,将类文件移动到app目录中,例如app/lib/survey_provider.rb. 然后里面的所有代码app都会被 Rails 自动加载。
  2. 或者确保路径class SurveyProvider包含在 Rails 的 autoload_path 中。在config/application.rb

    config.autoload_paths += %W(#{config.root}/lib) # where lib is directory to survery_provider

    如果您使用 Rails 5,请注意在生产环境中禁用自动加载。检查此链接以获取更多信息。

于 2017-02-24T06:16:29.363 回答