0

好的,我一直在挖掘并没有找到答案。我有一个非常复杂的自定义 Rails 表单生成器应用程序,它从数据库中呈现页面、部分和调查(表单)。

它在服务器端进行验证(还没有完成 javascript 并且想要两种类型),并且我让它适用于所有类型的表单输入对象,除了单选按钮。因为我无法让它提交单选按钮以在未选中时显示在参数中。与仅在参数之外寻找单选按钮相反,我想找到一种方法在我的响应循环中检查它们(如果可能的话)。

我已经看到了将其绑定到模型以确保其验证的建议,但我的问题是独一无二的,因此我没有将其绑定到的模型对象。

我的表格是在一个部分声明的:

<%= form_tag take_surveys_path, :id => "take_surveys_new", :method => :post do %>

以及我用于生成单选按钮的代码(查看问题类型字段的部分部分):

<% when 'Radio Button' %>
 <% question.answers.each do |answer| %>
        <%= radio_button "response[#{question.id}]content", question.question_text, answer.value %>
        <%=answer.value%>
        <br />
        <% end %>
<% end %>

我遍历“take_survey_controller”中的参数,然后检查每个问题是否有效,其中包括基于问题对象中设置的一些属性的正则表达式和所需验证:

  params[:response].each do |question_id, answer|
        #find my questions and answers, call 
        if item.valid?          
            #do a bunch of saving and stuff...
        end
  end   

但这永远不会被单选按钮调用,因为空单选按钮不会发布到参数。

有什么建议或帮助吗?如果需要,很高兴分享更多代码。

4

2 回答 2

1

听起来您的验证的一部分应该包括检查输入参数。如果未选择单选按钮,它将不会提交值,因此您需要有一个问题 ID 列表并确保在进入参数响应循环之前提交每个问题。

array_of_question_ids.each do |id|
  handle_missing_question(id) unless params[:response][id]
end

params[:response].each ...
于 2012-10-18T20:07:05.337 回答
1

您正在寻找的是一种为单选按钮设置默认值的方法。默认情况下,复选框会执行此操作,但在这种情况下,您的单选按钮似乎不会发生这种情况。

尝试这个:

<%= hidden_field "response[#{question.id}]content", question.question_text %>
<%= radio_button "response[#{question.id}]content", question.question_text, answer.value %>
于 2012-10-18T20:26:27.097 回答