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

Arc*_*nic 3 ruby-on-rails associations ruby-on-rails-3.1

我有3个模型 - 标准,图层layers_assocs.标准通过layer_assocs有很多层,其余的是微不足道的.该layers_assocs表存储standards_id,layer_id和一个visible布尔值,而表只是一个查找表name(和自动递增id).

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

<%= f.fields_for :layers_assocs do |assoc| %>
  <%= assoc.check_box :visible %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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

<%= assoc.text_field :layer_id %>
Run Code Online (Sandbox Code Playgroud)

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

我已经检查了rails apifields_for这个问题没有运气.任何一个:name:visible未定义.

Arc*_*nic 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 %>
Run Code Online (Sandbox Code Playgroud)

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

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