我正在为客户开发rails应用程序。简而言之,它是用于监控博士生的进展情况。其中一个主要功能要求是用户能够在线填写报告。我遇到的问题是其中一种形式。
我允许每个表单的问题数量完全不受限制,因此我使用动态符号来存储问题的答案,并将这些答案传递给控件中的哈希值。以下是表单代码片段和控制器方法:
<% @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
我得到的错误是这样的: 未定义的方法`[]&#39;为零: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
哈希不是数据库的一部分,它用于更新报表问题表中的条目(分隔到报表)。导致此错误的原因是没有从表单提交哈希(在错误屏幕上 - 它显示传递给控制器的参数,哈希不存在)。
另外,我不确定如何通过&#34;白名单&#34;对象,所以如果有人可以提供帮助,那也会有所帮助(现在我只是允许一切,所以不会成为问题。该领域因某些原因而未被提交)
如果您需要更多信息,请告诉我们! 干杯
答案 0 :(得分:0)
对于这个问题,我建议你使用更适合这种情况的嵌套表格,主要是为了用户体验。为此,您需要首先创建一个问题模型。
你可以关注this railscast,这解释了如何做...
不确定这是你在找什么......