你应该给. fields_for
有关该方法的更多信息,请参阅文档。在您的情况下,首先,将此行添加到您的User
模型中:
class User
has_many :leaves
accepts_nested_attributes_for :leaves
end
这是必需的,以便在发布您的表单时,来自表单字段的属性通过params
正确处理。
现在您的模板应该如下所示(为了简单起见,我假设您Leave
也有一个名为 的简单文本字段foo
):
<%= form_for @user do |f| %>
...
<%= f.fields_for :leaves do |leave_fields| %>
# Fields for a leave here ----v
Foo: <%= leaves_fields.text_field :foo %>
<% end %>
<% end %>
或者,如果您@user.leaves
已经初始化并且希望表单构建器将其值放入表单字段,则必须迭代@user.leaves
,将它们中的每一个fields_for
作为第二个参数传递:
<%= form_for @user do |f| %>
...
<% @user.leaves.each do |leave| %>
<%= f.fields_for :leaves, leave do |leave_fields| %>
# Note the addition here --^
Foo: <%= leave_fields.text_field :foo %>
<% end %>
<% end %>
<% end %>
但是您的问题还有另一个问题:您没有文本字段,而是hash,并且没有默认的表单输入(即没有f.hash_field :leaves_types
)。因此,您可能希望像以下问题中建议的那样自己制作:[1]、[2]和[3]。
无论如何,拥有一个 Hash 字段对我来说似乎并不常见,所以也许 Hash 可以以某种方式替换,比如说,用另一个has_many
关联(不确定),在这种情况下你只需要另一个嵌套fields_for
的 .