RoR:NameError:未初始化的常量(服务)

时间:2014-11-16 18:02:08

标签: ruby-on-rails service controller nameerror


这是我在SO的第一个问题:) 我对RoR很新,我尝试了解PINGOWebApp,你可以在这里找到https://github.com/PingoUPB/PINGOWebApp。 他们在app / services /(例如number_question.rb,text_question.rb)中的不同类型的问题中指定了他们的“问题”模型(app / models / question.rb),所有问题都继承自app / services / generic_question.rb:

class GenericQuestion < Delegator

  def initialize(question)
    super
    @question = question
  end

  def __getobj__ # required
    @question
  end

  def __setobj__(obj)
      @question = obj # change delegation object
  end

  def to_model
    @question.to_model
  end

  def has_settings?
    false
  end

  def add_setting(key, value)
    @question.settings ||= {}
    @question.settings[key.to_s] = value.to_s
  end

  def self.model_name
    Question.model_name
  end

  def self.reflect_on_association arg
    Question.reflect_on_association arg
  end

  alias_method :question, :__getobj__ # reader for survey

end

这是我的第一个问题:
1)由于没有服务生成器,他们必须手动创建app / service /中的所有ruby文件,不是吗?或者还有其他什么方式?

2)我分叉了项目并手动添加了另一个服务,名为dragdrop_question.rb,并将其集成到question_controller.rb中:

class QuestionsController < ApplicationController
...
  def new
    @question_single = SingleChoiceQuestion.new.tap { |q| q.question_options.build }
    @question_multi = MultipleChoiceQuestion.new.tap { |q| q.question_options.build }
    @question_text = TextQuestion.new
    @question_number = NumberQuestion.new  #refactor this maybe?
    @question_dragdrop = DragDropQuestion.new.tap { |q| q.answer_pairs.build }
  end
...
end

我还调整了视图并在本地测试了它。我在/ questions / new得到了NameError 未初始化的常量QuestionsController :: DragDropQuestion。
如果我添加

require_dependency "app/services/dragdrop_question.rb"

到question_controller.rb错误消失了,但他们还没有做过这样的事情。那么他们如何将这些服务引入控制器呢?
感谢您提前提供的任何帮助,特别是有关解释控制器模型 - 视图 - 服务模式的教程或书籍参考。

1 个答案:

答案 0 :(得分:7)

尝试遵循正确的命名惯例,您的班级名称为DragDropQuestion,因此预期的文件名为drag_drop_question.rb