【问题标题】:Prepopulate complex form values in rails edit view在 Rails 编辑视图中预填充复杂的表单值
【发布时间】:2015-06-20 01:04:03
【问题描述】:

我有一个评估表,它呈现问题列表,并接受每个问题的答案。表单数据通过ajax手动提交。

尝试在我的编辑视图中预填充数据时遇到问题。以下是我的观点:

edit.html.erb:

<div class="container">
    <%= render 'assessment_form', :locals=> {:assessment => @assessment} %>
</div>

_assessment_form.html.erb:

<%= form_for @assessment do |f| %>
   <%= f.submit 'Save', :class=> "btn btn-primary", :style=>"width: 100%;" %>

      <div class="col-sm-2 col-sm-offset-10">
        <h4>Show on Followup?</h4>
     </div>

      <% @assessment.questions.where(category:"S").each do |question| %>
        <%= render 'question_fields', :question=> question, :f=> f %>
      <% end %>

    <%= f.hidden_field :patient_id, :value=> @assessment.patient.id %>
    <%= f.hidden_field :template_id, :value=> @assessment.template_id %>
<% end %>

_question_fields.html.erb:

<p><%= question.content %></p>

  <%= f.fields_for :answer do |builder| %>

    <div class="row question">

      <div class="col-sm-2 pull-right toggle">
        <%= builder.check_box :tracking, {:checked=> false, :class=>"trackable", :data => {:'on-text' => "Yes", :'off-text' => "No", :'on-color'=> "success", :question => question.id}}, 0 , 1 %>
      </div>

      <div class="col-sm-10">
          <%= builder.text_area :content, :class=>"form-control question-field", :data => {:question => question.id} %>
       </div>

    </div>

  <% end %>

但视图中没有呈现任何答案内容,表单字段为空白。

这是一个示例调用:Assessment.last.answers.first.content 会给我字符串“test”。这应该会显示在我的 text_area 框中,但它没有。

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    随便做,实例变量@assessment传给partial。

    <%= render 'assessment_form' %>
    

    【讨论】:

    • 你确定 question.content 有值吗?您的示例得到的是 Answer.content,而不是 question。
    • 所以 question.content 是表格中的固定值,它在视图中呈现良好(这是实际的“问题”,例如“你的身高是多少?”)。但是 f.fields_for :answer 表单不会呈现这些问题的任何答案,例如“测试”。
    • 评估模型从您的代码看起来有_many 个答案,您的 fields_for :answer 没有任何问题。您没有在问题中提供您的模型信息,但我认为您应该通过问题而不是评估来获得答案,因此根据逻辑,它可能是 f.fields_for @question.answer
    • 对 - 最初一个问题确实有很多答案,但我意识到答案属于评估实际上是有意义的。但是 f.fields_For @assessment.answers 为 #<:activerecord_associations_collectionproxy:0x007fdb1207a0b8> 抛出未定义的方法“内容”
    • 那是因为您只能针对单个问题调用该方法。 '@assessment.answers.map(&:content)' 将获取每个问题的内容。
    猜你喜欢
    • 2016-02-05
    • 2013-12-28
    • 2013-01-09
    • 2011-11-15
    • 1970-01-01
    • 2015-08-26
    • 2022-10-08
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多