如果用户未选中复选框,我怎么能不向控制器发送任何内容

How can I not sending anything to controller if user not checked checkbox

我的表单有两种输入单选按钮和复选框。 我正在使用 accepts_nested_attributes_for 来做一个嵌套属性 所以,对于单选按钮,它工作正常

<%= questions.each do |question| %> 
  <%= f.fields_for :user_response do |response| %>
   <% question.answers.each do |answer| %>
    <%= response.radio_button :answer_id, answer.id %>
   <% end %>
  <% end %>
<% end  %>

它将发送用户选择的 answer_id

但是,在复选框上

<%= questions.each do |question| %> 
 <% question.answers.each do |answer| %>
  <%= f.fields_for :user_response do |response| %>
   <%= response.check_box :answer_id, {}, answer.id, nil %>
  <% end %>
 <% end %>
<% end  %>

它有一些问题,当用户没有选中复选框时,它仍然发送 answer_id 为零的数据,因为 <%= response.check_box :answer_id, {}, answer.id, nil %>

我的问题是如何只发送选中复选框的answer_id。

来自API Doc

check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")

check_box 的最后一个参数是 unchecked_value。当未选中 check_box 时,它会存储您赋予它的值。您将 nil 作为值,因此值存储为 nil。将其更改为如下所示将解决您的问题

<%= response.check_box :answer_id, {}, answer.id, false %>