Ruby on rails 如何允许用户取消选择意外单击的Rails单选按钮?

Ruby on rails 如何允许用户取消选择意外单击的Rails单选按钮?,ruby-on-rails,Ruby On Rails,我有一个Rails表单,允许用户从带有复选框的对象集合中进行选择,还可以选择其中一个作为主要选择。然而,并不总是有一个主要的选择,而且现在如果用户不小心点击了一个单选按钮,似乎没有一种方法让临时用户取消选择它 <%= form_tag song_part_singer_parts_path(@song, @part) do %> <input type="hidden" name="song_id" value="<%= @song.id %>" />

我有一个Rails表单,允许用户从带有复选框的对象集合中进行选择,还可以选择其中一个作为主要选择。然而,并不总是有一个主要的选择,而且现在如果用户不小心点击了一个单选按钮,似乎没有一种方法让临时用户取消选择它

<%= form_tag song_part_singer_parts_path(@song, @part) do %>
    <input type="hidden" name="song_id" value="<%= @song.id %>" />
    <table>
        <tr>
            <th>Singer</th>
            <th>Primary?</th>
        </tr>
    <% Singer.active.each do |s| %>
        <tr>
            <td>
                <%= check_box_tag "singer_ids[]", s.id  %>
                <%= s.name %>
            </td>
            <td>
                <%= radio_button_tag "primary", s.id %>
            </td>
        </tr>
    <% end %>
    </table>
    <%= submit_tag "Update" %>
<% end %>

编辑:进一步的研究表明,通过单选按钮的设计,这是不可能的。我也会接受这个问题的其他解决方案。我需要用户能够选择零个或一个选项,但不能选择更多选项,并在出错时纠正错误。

解决此问题的方法有多种:

1您可以在非主要位置添加一个额外的空白值单选按钮

2您可以使用带有空白默认/提示的select:

    ...
</table>
<%= select_tag "primary", options_from_collection_for_select(Singer.active.all, "id", "name"), prompt: 'No Primary' %>
3您可以使用javascript关闭选择:

<td>
    <%= radio_button_tag "primary", s.id %>
    <span class="toggle-label">Clear primary</span>
</td>

<style>
/* hide label when unchecked */
input[type=radio] + span {
  display: none;
}
input[type=radio]:checked + span {
  display: inline;
  cursor: pointer;
}
</style>

<script>
document.addEventListener('click', function(event) {
    if (event.target.matches('.toggle-label')) {
        var td = event.target.parentElement;
        var input = td.querySelector('input')
        input.checked = false
    }
});
</script>

创建一个清除收音机的“重置”按钮怎么样?如果你不想像@jvillian建议的那样使用clear选项,也许你可以使用复选框而不是单选按钮,并使用javascript只允许选中一个复选框