3

標準レイヤー、およびlayers_assocsの3つのモデルがあります。標準には、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 APIをfields_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 %>

チェック ボックスを機能させるには、キーとして visible 属性が必要です。f.check_box layer_assoc.visible「true」または「false」を強制的にフィードしようとしていると思うだけです。名前を取得する際の問題:visibleは、が正しいスコープにある場合、がオブジェクトではなく FormBuilder オブジェクトであるため、ブロックlayer_assoc.layer.name内でアクセスできないことです。上記により、両方のスコープが利用可能であり、出力がやり過ぎていないことが確認されます。標準配列にあるオブジェクトと同じ数の重複を出力します。適正量に制限します。fields_forlayer_fieldlayers_assocf.fields_for :layers_assoclayer_assocsf.fields_for :layers_assoc, assoc

for="..."フォーム ラベルは、出力 HTML で関連付けられているチェック ボックスに適切に「添付」されていないことに注意してください。私はそれで対処できますが、より良い方法を知っていれば教えてください。

于 2013-05-07T21:12:26.893 に答える