如何以简单的形式在现有记录的集合中选中复选框?

How do I check boxes in a collection for existing records in simple form?

假设我有一个这样的输入字段:

<%= f.input :parents, collection: @nodes, as: :check_boxes, label: "Parents" %>

我想要发生的是对于任何已经是现有节点 node.parents@nodes,而不是将它们的复选框显示为空,我希望它有一个复选框.

想法是我应该能够取消选中它们并选中其他节点以更改现有节点的父节点。

你能做的就是使用 checkbox collection builder。它让您为呈现的每个复选框添加逻辑,因此您只需要一个简单的模型函数来检查 parents。像这样:

<%= collection_check_boxes(:node, :node_ids, @nodes, :id, :node_name) do |b| %>
  <% isParent = true %>
  <%= b.label { b.check_box(checked:isParent) } %>
<%end%>

编辑 - simple_form:

<%= simple_form_for @node do |f| %>
 <%=  f.input :parents,
        :collection => @nodes,
        :as => :check_boxes,
        :checked => @node.parent_ids #array of node ids for parents
 %>
<% end %>

然后使用模型函数检索 parent 个节点 ID 数组。