1

私は Rails MVC の概念全体にかなり慣れていないため、次のことを行うフォームの作成を任されています。

  • テスト番号を取る
  • テストごとにいくつのセクションがあるかを示します (これは定数で、常に 4 です)
  • ユーザーがセクション内の各質問の回答に入力できる領域を許可します。各セクションの問題数は、受験するテストの数によって異なります。

次のようなビューがあります。

  = form_for [@answer_sheet] do |f|
      =f.collection_select(:test_prep_number, Exam.find(:all),:test_prep_number, :test_prep_number, {:include_blank => 'Select your test prep number'})
      =f.fields_for :answer_sections do |section_form|
         =section_form.label :section
              .form-inline
             =f.label :A 
             =radio_button_tag 'answer', 'A'
             =f.label :B
             =radio_button_tag 'answer', 'B'
             =f.label :C
             =radio_button_tag 'answer', 'C'
             =f.label :D
             =radio_button_tag 'answer', 'D'
             =f.label :E
             =radio_button_tag 'answer', 'E'

私のコントローラーは次のようになります。

def index
    @answer_sheet = AnswerSheet.build_with_answer_sections
    @answer_section = AnswerSection.new
    @section_count = AnswerSection.where("exam_id = ?", params[:test_prep_number).count
end

私が今抱えている問題は、正しい数のラジオボタンを作成することに頭を悩ませているように見えないことです。これまでのところ、セクションごとに 1 つの質問しか生成できませんでした。

for ループが必要になると思います (これには、試験セクションごとにいくつの問題があるかを調べるためのクエリが必要になります)。

編集:要求に応じてモデルを追加する

解答用紙モデル

class AnswerSheet < ActiveRecord::Base
  attr_accessible :date, :raw_score, :test_prep_number, :answer_sections, answer_sections_attributes
MAX = 101
validates :test_prep_number, :presence => true
validates :raw_score, :presence => true, :numericality => { :greater_than_or_equal_to => 0, :less_than_or_equal_to => MAX}
validates :date, :timeliness => {:on_or_before => lambda { Date.current }, :type => :date}, :presence => true
belongs_to :user
has_many :answer_sections

解答部モデル

class AnswerSection < ActiveRecord::Base
  MAX = 30

  attr_accessible :section_score, :answers, :answer_attributes
  has_many :answers, :dependent => :destroy
  belongs_to :answer_sheet
  accepts_nested_attributes_for :answers

  validates :section_score, :presence => true, :numericality => { :greater_than_or_equal_to => 0,
:less_than_or_equal_to => MAX }
4

1 に答える 1

0

モデルを微調整して、ユーザーの回答からの選択を妨げるものにすることをお勧めします。

class Test < ActiveRecord::Base
  belongs_to :user
  has_many :question

  attr_accessible :date, :test_prep_number

  validates :test_prep_number, :presence => true
  validates :date, :timeliness => {:on_or_before => lambda { Date.current }, :type => :date}, :presence => true
end

class Question < ActiveRecord::Base
  MAX = 30

  attr_accessible :question_text
  has_many :choices, :dependent => :destroy
  has_one :answer
  belongs_to :test
  accepts_nested_attributes_for :answers

end

class Choice < ActiveRecord::Base
  attr_accessible :question_id, :choice_text, :correct_choice
  belongs_to :question
end

class Answer < ActiveRecord::Base
  attr_accessible :choice_id
  belongs_to :user
  belongs_to :question 
end
于 2013-05-16T18:05:50.340 に答える