【发布时间】:2014-09-09 10:32:06
【问题描述】:
我正在为客户开发一个 Rails 应用程序。简而言之,它是用于监控博士生的进展。主要功能要求之一是用户能够在线填写报告。我遇到的问题是其中一种形式。
我允许每个表单的问题数量完全不受限制,因此我使用动态符号来存储问题的答案,并将这些答案以哈希的形式传递给控制器。这是表单中代码的 sn-p 和控制器方法:
<% @questions.each do |q| %>
<div class="field">
<!--Question Label -->
<%= s.send(:label, "Question #{q.question_number}") %>
<!--Link to delete question -->
(<%= link_to 'Remove', {:controller => "report_details", :action => "delete_question", :question_to_delete => q.id}, data: { confirm: 'Are you sure?' }, :class => 'form-link', :method => "post" %>)
<!--Question text box -->
<%= s.send(:text_area, "qu_hash[question#{q.question_number}]", :rows => 3, :cols => 60, :value => q.question) %>
<!--New Question Button -->
<%= link_to '>> Insert Question Here <<', {:controller => "report_details", :action => "add_question", :position_to_add => q.id}, :method => "post" %>
</div>
<% end %>
我认为我的问题与下面的行有关。我将在下面解释原因,但这是我的控制器方法(通过提交表单访问)。
def save
questions = params[:report_detail][:qu_hash]
ReportDetailQuestion.where(:report_detail_id => @report_detail.id).each do |q|
q.update_attributes(:question => questions["question#{q.question_number}".to_sym])
end
redirect_to @report, notice: 'Report was successfully updated.'
end
我得到的错误是: nil:NilClass 的未定义方法“[]”
questions = params[:report_detail][:qu_hash]
ReportDetailQuestion.where(:report_detail_id => @report_detail.id).each do |q|
#Error occurs on the below line
q.update_attributes(:question => questions["question#{q.question_number}".to_sym])
end
哈希不是数据库的一部分,它用于更新报告问题表中的条目(独立于报告表)。导致此错误的原因是未从表单提交哈希(在错误屏幕上 - 它显示传递给控制器的参数,哈希不存在)。
另外,我不确定如何通过对象的“白名单”允许此哈希,所以如果有人可以提供帮助,它也会有所帮助(现在我只是允许一切,所以不会问题。由于某种原因,该字段没有被提交)。
如果您需要更多信息,请告诉我! 干杯
【问题讨论】:
-
您的问题哈希值似乎为零,因此尝试访问问题编号失败。所以实际问题出在
questions = params[:report_detail][:qu_hash] -
这是表单传递的参数列表,:qu_hash 不在参数列表中 {"utf8"=>"✓", "authenticity_token"=>"9XBEgifII3Kf3Oaq0gqDn0ysidEtuaTJYMr5qUK+sdM=", "report_detail"=>{"title"=>"PH010", "description"=>"确认博士头衔和监督团队;确认是否需要道德规范以及向 PGR 管理员提交道德规范的预期日期。", "three_year_deadline"=> "2", "four_year_deadline"=>"2", "six_year_deadline"=>"4", "role"=>"student"}, "commit"=>"Submit", "id"=>"1"}
标签: ruby-on-rails ruby forms hash params