我正在创建一个复杂的rails表单,用于与嵌套表单的1:n关系,并使用另一个数据表中的值选择集合。
到目前为止,只要用户在更新前没有选择正确的值,它就会使用collection_select的值列表中的第一个条目覆盖数据库值。我仍然需要正确设置collection_select中的初始值。
我已经阅读了很多关于SO的问题,最相关的是: f-collection-select-not-displaying-the-selected-value
唯一仍然缺少的东西(我希望!),是从数据库设置表单字段的值,因此它不会被选择的可选值中的默认值覆盖,即使用户没有触及了选择。
此代码段源自我的代码和上述问题的解决方案,并且是错误的。
让一个人有很多东西,而且validthings包含了可能的值:
在thing表中只有Thing字符串,它们也在validthings表中。可以为collection_select选择的参数提供一个来自items表的字符串,该表可以在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
是的,在表格中的人物,事物和词汇表中,该列被命名为#34; Thing&#34;。它是表validthings中的一个唯一字符串 - 数据库结构不是我的想法,我只使用它。
答案 0 :(得分:0)
在此处找到了有用的答案:rails-accessing-current-value-of-a-symbol 另一个主题,但我的问题是我不知道如何访问我知道必须已加载的信息。
这就是我可以将collection_select的默认值指定为数据库中的数据的方法:
<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 => d.object.Thing} ) %>
<% end %>
<% end %>
</div>
其中 d.object.Thing 是属性&#34; Thing&#34;的表单元素的相应对象的值,它已经存在于表单中。
我非常感谢建设性的想法,以防我的方法不像红宝石或类似的。我对ruby,rails等很新。