我目前正在创建一个复杂的 rails 表单,用于与嵌套表单和集合选择的 1:n 关系,并使用另一个数据表中的值。
到目前为止,只要用户在更新之前没有选择正确的值,它就会用 collection_select 的值列表中的第一个条目覆盖数据库值。我仍然需要正确设置 collection_select 中的初始值。
我已经阅读了很多关于 SO 的问题,最相关的是: f-collection-select-not-displaying-the-selected-value
唯一仍然缺少的(我希望!)是从数据库中设置表单字段的值,因此即使用户没有触摸选择,它也不会被选择的可选值中的默认值覆盖.
此代码段源自我的代码和上述问题的解决方案,并且是错误的。
让一个人拥有许多事物,validthings 包含事物的可能值:
在 things 表中只有 Thing 字符串,它们也在 validthings 表中。可以给 collection_select 选择的参数一个来自 things 表的字符串,该字符串可以在 validthings 表的值列表中识别。
<div class="col-md-12">
<%= form_for(@person) do |f| %>
<%= f.fields_for :things do |d| %>
<%= d.hidden_field :id %><%= d.hidden_field :person_id %>
<%= d.collection_select(:Thing, Validthings.all, :Thing, :Thing, {:selected => @person.things.map(&:id).Thing.to_s} ) %>
<% end %>
<% end %>
</div>
这是错误的:
@person.things.map(&:id).Thing.to_s
是的,在表格中的人物和事物以及有效事物中,该列被命名为“事物”。它是表validthings 中的唯一字符串——数据库结构不是我的主意,我只使用它。