我在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
操作多添加字段。
答案 0 :(得分:1)
我相信你应该能够做到这样的事情:
<%= f.collection_radio_buttons :a_content, choice, :id, :c_description, {}, { checked: choices.selected_response_id } %>
有了这个,您应该能够为所有答案生成单选按钮。
PS:最终哈希具有检查所选选项choices.selected_response_id
的条件,您应该将其更改为答案模型上的选定答案。
虽然Rails尝试推断预先选择的单选按钮,但它可能并不总是有效,因此最终哈希的原因。
答案 1 :(得分:0)
如果要预先选择单选按钮,则表示您已在数据库中为此字段存储了一个布尔值。只需在帮助程序中选中选中的选项后插入此值:
radio_button_tag(&#34;某事&#34;,某事,检查=价值)
应该与f.radio_button
一样