我一直在努力为具有数组字段的 Mongoid 模型创建一个表单。我希望我的表单在数组中的每个条目上都有文本框。如果我正在创建一条新记录,则默认值为一个空字段(以及一些用于在页面上动态添加新字段的 javascript)。
我已经搜索了使用 fields_for 的解决方案,但似乎更倾向于处理您拥有对象/模型数组的情况,而不是我拥有的情况,即字符串数组。
我将使用一个人和一个电话号码的例子。
class Person
include Mongoid::Document
field :name, :type => String
field :phone_numbers, :type => Array
end
对于控制器,假设是典型的控制器,但在new方法中我用一个空白字符串初始化了 phone_number 数组。
这是表单代码:
<%= form_for(@person) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :phone_numbers %><br />
<% @person.phone_numbers.each do |phone_number| %>
<%= text_field_tag "person[phone_numbers][]", phone_number %>
<% end %>
</div>
<% end %>
这一切都很好。有几件事我不喜欢。
- text_field_tag 调用中字段的硬编码名称。
- 使用 text_field_tag 而不是 f.text_field
- 感觉我应该以某种方式使用 fields_for 而不是这个
有人对如何实现这一点有更好的建议吗?或者你会认为这是正确的吗?