【问题标题】:Rails radio buttons not passing value consistentlyRails 单选按钮没有一致地传递值
【发布时间】:2012-10-15 03:46:45
【问题描述】:

我的单选按钮出现了一些问题。这是我的 ruby​​ 生成的 HTML:

    <form accept-charset="UTF-8" action="/uanswers" class="new_uanswer" id="new_uanswer"         method="post"><div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="✓" /><input name="authenticity_token"    type="hidden" value="tiJsYNr71Zqo+R5TheG2nvB3ownJ4iKbmwMfA/11TXg=" /></div> 
        <table> 
    <input id="uanswer_answer_id" name="uanswer[answer_id]" type="hidden" /> <tr> 
    <td><input id="uanswer_answer_id_12" name="uanswer[answer_id]" type="radio" value="12" /></td> 
    <td><label for="uanswer_answer_id">!</label></td> <td> | Count: 0</td> </tr> <input id="uanswer_answer_id" name="uanswer[answer_id]" type="hidden" />
    <tr> 
    <td><input id="uanswer_answer_id_13" name="uanswer[answer_id]" type="radio" value="13" /></td>
    <td><label for="uanswer_answer_id">!!</label></td> <td> | Count: 0</td> </tr> <input id="uanswer_answer_id" name="uanswer[answer_id]" type="hidden" />
    <tr>
    <td><input id="uanswer_answer_id_14" name="uanswer[answer_id]" type="radio" value="14" /></td>
    <td><label for="uanswer_answer_id">!!!</label></td> <td> | Count: 0</td>
    </tr>
</table>

不幸的是,它仅在我选择第三个单选按钮时才有效。例如,如果我选择第一个或第二个,params 哈希中的“answer_id”字段为空。但是,如果我选择第三个,它是正确的值:14。 为什么它会这样做? HTML 似乎是正确的。

编辑:这是这个 HTML 背后的 ERB

<%= form_for(uanswer) do |f| %>
  <table>
  <% answers.each do |answer| %>
  <%= f.hidden_field :answer_id %>
    <tr>
      <% unless current_user.has_answered? question %>
        <td><%= f.radio_button :answer_id, answer.id %></td>
      <% end %>
      <td><%= f.label :answer_id, answer.answer %></td>
      <td> | Count: <%= answer.count %></td>
    </tr>
  <% end %>
  </table>
  <% unless current_user.has_answered? question %>
    <%= f.submit "Answer!" %>
  <% end %>
<% end %>

【问题讨论】:

  • 为什么您有多个带有name="uanswer[answer_id]" 的隐藏输入和具有相同name 属性的单选按钮?为什么&lt;label&gt;s 引用隐藏的输入?您的 HTML 也有几个具有相同 id 的元素,这是无效的 HTML(可能是您的问题的根源)。你的 HTML 对我没有任何意义,原来的 ERB 是什么样的?
  • 我是 Rails 等的新手,radio_button 函数似乎没有很好的文档,至少对我来说是这样。
  • 我将 ERB 添加到原始问题中。回想起来,我可能不需要隐藏字段,但这会改变我看到的行为吗?
  • 复制ids 时会发生各种奇怪的事情。将&lt;label&gt;s 绑定到隐藏的输入是最奇怪的。在单选按钮和其他东西之间复制name 属性也有点奇怪。我怀疑如果您摆脱隐藏的输入,一切都会正常工作。

标签: ruby-on-rails ruby radio-button


【解决方案1】:

answer_id 的隐藏字段可能是必需的(如果未选中单选按钮,它将使服务器清除 answer_id),但它被放置在错误的位置。它应该在循环之外:

<%= form_for(uanswer) do |f| %>
  <table>
  <%= f.hidden_field :answer_id %>
  <% answers.each do |answer| %>
    <tr>
      <% unless current_user.has_answered? question %>
        <td><%= f.radio_button :answer_id, answer.id %></td>
      <% end %>
      <td><%= f.label :answer_id, answer.answer %></td>
      <td> | Count: <%= answer.count %></td>
    </tr>
  <% end %>
  </table>
  <% unless current_user.has_answered? question %>
    <%= f.submit "Answer!" %>
  <% end %>
<% end %>

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2017-12-05
    • 2021-04-14
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多