【问题标题】:Passing rails hash map to Controller (from form)将 rails 哈希映射传递给控制器​​(来自表单)
【发布时间】: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


【解决方案1】:

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

您可以关注this railscast,它很好地解释了如何做...

不确定它是否是您要查找的内容...

【讨论】:

  • 谢谢,这看起来真的很有用——我想我进入这个项目已经太晚了,无法完全改变我的工作方式。我设法以某种方式修复了我的错误 - 我真的不知道如何 - 我并没有真正做任何事情来改变它,哈哈!下次我肯定会这样做,看起来效率更高。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
相关资源
最近更新 更多