将rails hash map传递给Controller(从表单)

时间:2014-09-09 10:32:07

标签: ruby-on-rails ruby forms hash params

我正在为客户开发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;对象,所以如果有人可以提供帮助,那也会有所帮助(现在我只是允许一切,所以不会成为问题。该领域因某些原因而未被提交)

如果您需要更多信息,请告诉我们! 干杯

1 个答案:

答案 0 :(得分:0)

对于这个问题,我建议你使用更适合这种情况的嵌套表格,主要是为了用户体验。为此,您需要首先创建一个问题模型。

你可以关注this railscast,这解释了如何做...

不确定这是你在找什么......