【发布时间】:2014-02-14 21:19:04
【问题描述】:
我有一个包含问题和答案的表格,它包含:student_id、survey_id、question_id、answer_id。我希望每个表格都应该保存与问题相等的记录。
我有两个问题:
1- 我的创建操作中只有第一个属性 (student_id) 保存为 0 value ,其他属性保存为 Null
2- 表单提交 2 条额外记录。当我回答 3 个问题时,我当前的表单有 3 个问题,我在数据库中得到了 5 条记录(第一条记录只有空值,student_id = 0 除外,其他记录所有属性都为空值。
控制器:
def create
#student_id saved as 0 and the rest attributes saved as Null
#always save two extra records with null value even when i answer all questions
params[:subject_survey].each do |student, survey, question, answer|
@sv_sub = SubjectSurvey.create(student_id: student["student_id"],
survey_id: survey["survey_id"],
question_id: question,
answer_id: answer)
end
if @sv_sub.save
redirect_to surveys_path, notice: "Success."
else
render :new, notice: "Failed."
end
end
服务器日志:
#when answering three questions:
Started POST "/subject_surveys" for 127.0.0.1 at 2014-02-14 21:54:09 +0200
Processing by SubjectSurveysController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"C8w1p+tQCTY25SJU5TGJcqCqRoUw1TvVBjEJgpjPMPc=", "subject_survey"=>{"student_id"=>"1", "survey_id"=>"1", "2"=>{"answer_id"=>"7"}, "3"=>{"answer_id"=>"14"}, "4"=>{"answer_id"=>"19"}}}
#when answering one question:
Started POST "/subject_surveys" for 127.0.0.1 at 2014-02-14 21:50:29 +0200
Processing by SubjectSurveysController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"C8w1p+tQCTY25SJU5TGJcqCqRoUw1TvVBjEJgpjPMPc=", "subject_survey"=>{"student_id"=>"1", "survey_id"=>"1", "2"=>{"answer_id"=>"7"}}}
new.html.erb
<%= form_tag('/subject_surveys', method: :post, class: 'form-horizontal' ) do %>
<% q = 0 %>
<% Survey.find(1).questions.order("questions.id asc").each do |question| %>
<% q += 1%>
<%= hidden_field_tag 'subject_survey[student_id]', "#{current_user.student.id}" %>
<%= hidden_field_tag 'subject_survey[survey_id]', '1' %>
<h6>Q<%= q %>- <%= question.content %></h6>
<div class="clearfix"></div><div class="clearfix"></div>
<% if question.question_type == "#{Question::CHECK}" %>
<% question.answers.each do |answer| %>
<%= check_box_tag "subject_survey[#{question.id}][answer_id][]", "#{answer.id}" %>
<%= answer.content %>
<div class="clearfix"></div>
<% end %>
<% elsif question.question_type == "#{Question::RADIO}" %>
<% question.answers.each do |answer| %>
<%= radio_button_tag "subject_survey[#{question.id}][answer_id]", "#{answer.id}" %>
<%= answer.content %>
<div class="clearfix"></div>
<% end %>
<% end %>
<% if question.id == Survey.find(1).questions.order("questions.id asc").last.id %>
<br>
<% else %>
<hr style="border-top: 1px solid #000000;">
<% end %>
<% end %>
<div class="form-actions no-margin">
<%= submit_tag "Submit", class: "btn btn-info pull-right" %>
<div class="clearfix"></div>
</div>
<% end %>
【问题讨论】:
标签: ruby-on-rails forms nested-forms