我正在尝试访问Hash
中的fieds_for
类型的mongoid,我已经与模型建立了关系,并希望访问该模型的哈希值。类似的东西:
class Leave
field :leaves_types, :type => Hash
end
class User
has_many :leaves
end
想做类似的事情:
form_for @user do |f|
f.fields_for :leaves.leave_types...
我怎么能做到这一点?提前谢谢。
答案 0 :(得分:0)
您应该将块提供给fields_for
。有关该方法see docs的更多信息。在您的情况下,首先,将此行添加到您的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 %>
但你的问题还有另外一个:你没有文本字段,而是哈希,并且没有默认表单输入(即没有f.hash_field :leaves_types
)。因此,您可能希望像在这些问题中建议的那样自行制作:[1],[2]和[3]。
无论如何,有一个Hash字段对我来说似乎并不常见,所以也许Hash可以某种方式替换,例如,用另一个has_many
关联(不确定),在这种情况下,你只需要另一个嵌套{{ 1}}。