Fields_for具有嵌套属性,has_many通过关联

时间:2013-05-06 19:43:14

标签: ruby-on-rails ruby-on-rails-3.1 associations

我有3个模型 - 标准图层 layers_assocs 。标准通过layer_assocs有很多层,其余的是微不足道的。 layers_assocs 表存储standards_idlayer_idvisible布尔值,而图层表只是一个带{的查找表{1}}(并自动增加name)。

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

:visible

如何使用 layers_assocs <%= f.fields_for :layers_assocs do |assoc| %> <%= assoc.check_box :visible %> <% end %> 图层关联显示相关图层名称是个谜。我可以用{/ p>显示belongs_to

layer_id

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

我检查了rails api on fields_forthis question没有运气。 <{1}}或assoc未定义。

1 个答案:

答案 0 :(得分: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 %>

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

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