如何从 Ruby on Rails 中的一组复选框中获取一组值?
How to get an array of values from a group of checkbox in Ruby on Rails?
我是 Rails 的新手,我不知道如何解决这个问题。
我有 2 个实体:Player 和 Call Up; N:M关系。所以基本上一个调用有一个 id,一些属性(比如对手,日期......)和一个玩家列表。
在新的征召表格中,我添加了 table 名可以包括在内的球员。每行都有对应玩家 ID 的复选框。视图如下:
<%= form_with(model: call_up) do |form| %>
<!--Call Up Informations-->
<!---->
<table class="table">
<thead>
<tr>
<th colspan="5"></th>
</tr>
</thead>
<tbody>
<% @players.each do |player| %>
<tr>
<td><%=player.first_name %></td>
<td><%=player.last_name %></td>
<td><%=player.number %></td>
<td><%=player.role %></td>
<div class="field">
<td><%=form.check_box :player_ids, class: "form-check-input", value: player.id %></td>
</div>
</tr>
<% end %>
</tbody>
</table>
<br>
<div class="actions text-center">
<%= form.submit "Create Call Up", class: "btn btn-dark" %>
</div>
<% end %>
在控制器中,我尝试使用 params[:player_ids]
获取玩家 ID 数组,但它产生了一个 nil 错误。
谁能帮帮我?
有时挖掘源代码对我们有很大帮助,尤其是在指南不清楚的时候。看看all check_box params
def check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
Tags::CheckBox.new(object_name, method, self, checked_value, unchecked_value, options).
end
这里是你的 form.check_box
在一个对象的 form_with
下所以 object_name 是对象名称 call_up
,method
这是你的对象参数想要 post player_ids
、checked_value
和 unchecked_value
是用户提交表单时该参数的值,它们将作为替代 checked/unchecked 数组发送每个复选框 [0, 1, 0, 1, ...]
,如果您只想发送选中的值,只需设置 unchecked_value = nil
.
<td><%=form.check_box :player_ids, {multiple: true, skip_default_ids: false, class: "form-check-input"}, player.id, nil %></td>
还有一件事,您的控制器将收到 has 参数 object_name => {..., method: [...]}
,因此您需要 permit
该数组:
def call_up_params
params.require(:call_up).permit(:name, player_ids: [])
end
我是 Rails 的新手,我不知道如何解决这个问题。
我有 2 个实体:Player 和 Call Up; N:M关系。所以基本上一个调用有一个 id,一些属性(比如对手,日期......)和一个玩家列表。
在新的征召表格中,我添加了 table 名可以包括在内的球员。每行都有对应玩家 ID 的复选框。视图如下:
<%= form_with(model: call_up) do |form| %>
<!--Call Up Informations-->
<!---->
<table class="table">
<thead>
<tr>
<th colspan="5"></th>
</tr>
</thead>
<tbody>
<% @players.each do |player| %>
<tr>
<td><%=player.first_name %></td>
<td><%=player.last_name %></td>
<td><%=player.number %></td>
<td><%=player.role %></td>
<div class="field">
<td><%=form.check_box :player_ids, class: "form-check-input", value: player.id %></td>
</div>
</tr>
<% end %>
</tbody>
</table>
<br>
<div class="actions text-center">
<%= form.submit "Create Call Up", class: "btn btn-dark" %>
</div>
<% end %>
在控制器中,我尝试使用 params[:player_ids]
获取玩家 ID 数组,但它产生了一个 nil 错误。
谁能帮帮我?
有时挖掘源代码对我们有很大帮助,尤其是在指南不清楚的时候。看看all check_box params
def check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
Tags::CheckBox.new(object_name, method, self, checked_value, unchecked_value, options).
end
这里是你的 form.check_box
在一个对象的 form_with
下所以 object_name 是对象名称 call_up
,method
这是你的对象参数想要 post player_ids
、checked_value
和 unchecked_value
是用户提交表单时该参数的值,它们将作为替代 checked/unchecked 数组发送每个复选框 [0, 1, 0, 1, ...]
,如果您只想发送选中的值,只需设置 unchecked_value = nil
.
<td><%=form.check_box :player_ids, {multiple: true, skip_default_ids: false, class: "form-check-input"}, player.id, nil %></td>
还有一件事,您的控制器将收到 has 参数 object_name => {..., method: [...]}
,因此您需要 permit
该数组:
def call_up_params
params.require(:call_up).permit(:name, player_ids: [])
end