【问题标题】:Uninitialized Constant in Rails ControllerRails 控制器中的未初始化常量
【发布时间】:2013-11-18 01:56:03
【问题描述】:

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

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

但这就是因为没有初始化而引发错误的同一行。我应该在哪里“初始化”提供者?

【问题讨论】:

    标签: ruby-on-rails ruby controller


    【解决方案1】:

    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,请注意在生产环境中禁用自动加载。检查这个link for more info.

    【讨论】:

      【解决方案2】:

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

      module FluidSurveysProviders
        class SurveyProvider
          ...
        end
      end
      

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

      class FluidSurveysProviders::SurveyProvider < ActiveRecord::Base
        ...
      end
      

      【讨论】:

        【解决方案3】:

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

        include FluidSurveysProviders

        【讨论】:

        • 我没有。当我include FluidSurveysProviders 我得到这个:ActionController::RoutingError (uninitialized constant SurveysController::FluidSurveysProviders) 而不是NameError
        • 忘了说你也需要require这个文件。
        猜你喜欢
        • 2018-03-27
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        相关资源
        最近更新 更多