【问题标题】:Fields_for with nested attribute, has_many through associationFields_for 带有嵌套属性,has_many 通过关联
【发布时间】:2013-05-08 05:12:26
【问题描述】:

我有 3 个模型 - standardslayerslayers_assocs。标准通过 layer_assocs 有很多层,其余的都是微不足道的。 layers_assocs 表存储 standards_idlayer_idvisible 布尔值,而 layers 表只是带有 name 的查找表(以及自动递增id)。

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

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

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

<%= assoc.text_field :layer_id %>

但尝试将其用作整数以通过 standard.layers[assoc.layer_id]standard.layers[:layer_id] 之类的层显示名称是行不通的。 assoc 是一个 FormBuilder 对象,所以我不确定该怎么做。检查 assoc 会吐出一个 huge 对象,其中包含标准中的所有内容。

我检查了rails api on fields_forthis question,但没有成功。 :name:visible 未定义。

【问题讨论】:

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


    【解决方案1】:

    知道了。一定是咖啡。

    <% @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.namefields_for 块内不可访问,因为layer_field 是一个FormBuilder 对象,而不是layers_assoc 对象。以上确保两个范围都可用并且输出没有过度。 f.fields_for :layers_assoc 将输出与标准 layer_assocs 数组中的对象一样多的重复项。 f.fields_for :layers_assoc, assoc 将其限制为正确的数量。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 2021-08-12
      相关资源
      最近更新 更多