0

我正在尝试访问一种Hash类型的 mongoid,fieds_for并且我已经与模型建立了关系,并且想要访问该模型的哈希。就像是:

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...

我怎样才能做到这一点?提前致谢。

4

1 回答 1

0

应该给. 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的 .

于 2013-01-29T08:55:42.763 回答