3

我有 3 个模型——standardslayerslayers_assocs。标准通过 layer_assocs 有很多层,其余的都是微不足道的。layers_assocs表存储,和一个布尔值,而layers表只是一个带有(和 auto-increment )的查找表。standards_idlayer_idvisiblenameid

:visible在标准选项页面上,我有一个更新嵌套属性的复选框。我正在寻找一种在表单标签中显示关联图层名称的方法。目前,我有这个复选框:

<%= f.fields_for :layers_assocs do |assoc| %>
  <%= assoc.check_box :visible %>
<% end %>

我将如何显示与layers_assocs belongs_to 图层关联的关联图层名称是一个谜。我可以layer_id用这个显示

<%= assoc.text_field :layer_id %>

但是尝试将其用作整数来通过图层显示名称,例如standard.layers[assoc.layer_id]standard.layers[:layer_id]不飞行。assoc是一个 FormBuilder 对象,所以我不知道该怎么做。检查assoc会吐出一个巨大的对象,其中包含标准中的所有内容。

我已经检查了rails apifields_for这个问题,但没有运气。要么 要么:name未定义:visible

4

1 回答 1

6

知道了。一定是咖啡。

<% @standard.layers_assocs.each do |assoc| %>
  <%= f.fields_for :layers_assocs, assoc do |layer_field| %>
    <%= layer_field.label assoc.layer.name %>
    <%= layer_field.check_box :visible %>
  <% end %>
<% end %>

要使复选框起作用,它需要可见属性作为键。f.check_box layer_assoc.visible只会认为你试图强制喂它“真”或“假”。然后获取名称的问题是,当:visible在正确的范围内时,layer_assoc.layer.name在块内无法访问,fields_for因为layer_field它是 FormBuilder 对象,而不是layers_assoc对象。以上确保两个范围都可用并且输出没有过度。将输出与标准数组f.fields_for :layers_assoc中的对象一样多的重复项。将其限制在正确的数量。layer_assocsf.fields_for :layers_assoc, assoc

请注意,表单标签for="..."在输出 HTML 中未正确“附加”到其关联的复选框。我可以处理它,但如果你知道更好的方法,请告诉我。

于 2013-05-07T21:12:26.893 回答