2014-11-16 2 views
4


это мой первый вопрос на SO :)
Я совершенно новый для RoR, и я пытаюсь понять PINGOWebApp, который вы можете найти здесь https://github.com/PingoUPB/PINGOWebApp. Они задали свою «вопросную» модель (app/models/question.rb) в разных типах вопросов в app/services/(например, number_question.rb, text_question.rb), все наследуемые от приложения/services/generic_question.rb:RoR: NameError: Uninitialized постоянной (служба)

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) Поскольку нет никакого генератора обслуживания, они должны быть созданы все рубин-файлы в приложение/сервис/вручную, не так ли? Или что еще есть?

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 

Я также адаптировал вид и проверил его на месте. Я получил NameError at/questions/new uninitialized constant QuestionsController :: DragDropQuestion.
Если добавить

require_dependency "app/services/dragdrop_question.rb" 

к question_controller.rb ушла ошибка, но они еще не сделали это что-нибудь подобное. Итак, как они представляют услуги для контроллеров?

Благодарим за любую помощь заранее, особенно за учебники или ссылки на книги, которые объясняют схему контроллера-модели-представления-службы.

ответ

7

Попробуйте следовать правилу именования имен, ваше имя класса - DragDropQuestion, поэтому ожидаемое имя файла - drag_drop_question.rb.

+0

Это решило мою проблему - я понял, что определяю несколько классов в одном файле. Перемещение дополнительных классов в их собственные файлы решило это. – taylorthurlow

Смежные вопросы