我有3个模型 - 标准,图层和 layers_assocs 。标准通过layer_assocs有很多层,其余的是微不足道的。 layers_assocs 表存储standards_id
,layer_id
和visible
布尔值,而图层表只是一个带{的查找表{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_for
和this question没有运气。 <{1}}或assoc
未定义。
答案 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="..."
正确“附加”到其关联的复选框。我可以处理它,但如果你知道更好的方法,请告诉我。