在编辑视图中显示选定的单选按钮

时间:2016-06-29 23:10:46

标签: ruby-on-rails

我在edit操作中显示所选单选按钮时遇到问题。

该应用允许user创建自己的forms(调查),然后将其应用(回答)到children

问题:

呈现允许用户new表单的answer操作时,forms显示良好,并正确保存到数据库。将选项分配给答案内容。

另一方面,edit操作重复选项,显示已选择的和新的选项。我检查了答案的id,并且每个答案都呈现2次。

有关如何解决此问题的任何想法?

  

相关代码:

_form.html.erb

<%= f.fields_for :answers do |a| %>

  <% choices.each do |choice| %>

    <%= a.radio_button :a_content, choice.c_description %>
    <%= a.label :a_content, choice.c_description, :value => choice.c_description, class: 'no-margin' %>

  <% end %>

  <%= a.hidden_field :question_id, :value => question.id %>

<% end %>

answered_forms_controller.rb

  def new
    @child = current_user.children.find(params[:child_id])
    @form = current_user.forms.find(params[:form_id])
    @answered_form = @child.answered_forms.new(form_id: params[:form_id])
    @answered_form.answers.build
  end

  def create
    @answered_form = AnsweredForm.create(answered_form_params)
    if @answered_form.save
      flash[:success] = "Nuevo cuestionario " + @answered_form.form.f_title + " aplicado!"
      redirect_to current_user.children.find(params[:child_id])
    else
      render 'new'
    end
  end

  def edit
    @child = current_user.children.find(params[:child_id])
    @form = current_user.forms.find(params[:form_id])
  end

  def update
    if @answered_form.update_attributes(answered_form_params)
      flash[:success] = "Cuestionario para paciente actualizado!"
      redirect_to @answered_form.child
    else
      render 'edit'
    end
  end
  

更新:

我现在发现重复发生的原因是new行动@answered_form.answers.build,但是如果删除它,我在创建新{{1}时看不到字段}}

我知道这一点,因为在answered_form操作中尝试放置2次@answered_form.answers.build,然后在编辑时创建重复 因此,如果您在new操作中有edit之类的内容,new总是会比@answered_form.answers.build操作多添加字段。

2 个答案:

答案 0 :(得分:1)

我相信你应该能够做到这样的事情:

<%= f.collection_radio_buttons :a_content, choice, :id, :c_description, {}, { checked: choices.selected_response_id }  %> 

有了这个,您应该能够为所有答案生成单选按钮。

PS:最终哈希具有检查所选选项choices.selected_response_id的条件,您应该将其更改为答案模型上的选定答案。

虽然Rails尝试推断预先选择的单选按钮,但它可能并不总是有效,因此最终哈希的原因。

Read more here

答案 1 :(得分:0)

如果要预先选择单选按钮,则表示您已在数据库中为此字段存储了一个布尔值。只需在帮助程序中选中选中的选项后插入此值:

radio_button_tag(&#34;某事&#34;,某事,检查=价值)

应该与f.radio_button

一样