1 class Questionnaire < ActiveRecord::Base
5 has_many :questions, :dependent => :destroy, :validate => false, :order => 'position ASC'
6 has_many :questionnaire_answers
8 validates_presence_of :name
9 validates_presence_of :content
12 QUESTION_CHOICE_COUNT = 8
16 if questions.size == 0
17 errors.add "dummy","質問がありません"
19 errors.add "dummy", "質問1がありません" if questions[0] && questions[0].position != 1
20 questions.each_with_index do | question, index |
21 errors.add "dummy", "質問#{question.position}の内容がありません" if question.content.nil?
22 errors.add "dummy", "質問#{question.position}の内容は不正な値です" if !question.content.nil? && question.content.length > 100000
25 question.question_choices.each_with_index do | question_choice, choice_index |
26 errors.add "dummy", "質問#{question.position}の質問形式が選択されていません" if !question_choice.format && choice_index == 0
27 errors.add "dummy", "質問#{question.position}の選択肢1がありません" if choice_index == 0 && (question_choice.format == QuestionChoice::CHECKBOX || question_choice.format == QuestionChoice::RADIOBUTTON) && question_choice.content.blank?
34 self.operation = false
35 QUESTION_COUNT.times do |question_idx|
36 question = Question.new(:content=>nil, :position=>question_idx+1)
37 QUESTION_CHOICE_COUNT.times do |choice_idx|
38 question.question_choices << QuestionChoice.new(:content=>nil, :position=>choice_idx+1)
44 def get_show_questions_data
46 QUESTION_COUNT.times do | question_idx |
47 if question = questions.find(:first, :conditions=>["position = ?", question_idx+1])
48 QUESTION_CHOICE_COUNT.times do | choice_idx |
49 if question_choice = question.question_choices.find(:first, :conditions=>["position = ?", choice_idx+1]) #既存の選択肢があれば取得
50 question.question_choices << question_choice
52 question.question_choices.build(:content => nil, :position=>choice_idx+1)
57 question = Question.new({:content => nil, :position => question_idx+1})
60 QUESTION_CHOICE_COUNT.times do | choice_idx |
61 question.question_choices << QuestionChoice.new({:content => nil, :position => choice_idx+1, :format => nil})
64 questions_data << question
69 def self.csv(id, count)
70 questionnaire = self.find(id)
71 header = get_csv_header(count)
72 f = StringIO.new('', 'w')
73 CSV::Writer.generate(f) do |writer|
75 questionnaire.questionnaire_answers.each do | questionnaire_answer |
76 row = questionnaire_answer.export_row
77 questionnaire_answer.question_answers.each do |question_answer|
78 row.concat(question_answer.export_row)
88 def self.get_csv_header(count)
89 header = ["アンケート回答ID",
106 count.times do | index |
107 header += ["回答#{index+1}"]