0

これは、HAMLを使用するRails3アプリケーションです。私は次のものを持っています:

= f.fields_for :bar_memberships do |bar_membership_fields|
  = 'FIELD'

問題をカプセル化しました。このコードは次のように出力します。FIELDFIELDFIELD期待どおり。

しかし、次のコード:

= f.fields_for :bar_memberships do |bar_membership_fields|
  - if bar_membership_fields.object.new_record?
    = 'FIELD'

HTMLでエスケープされた多くの非表示の入力をソースコードにレンダリングし、それらをページに表示します。

'<input id="person_bar_memberships_attributes_0_id" name="person[bar_memberships_attributes][0][id]" type="hidden" value="824" />
<input id="person_bar_memberships_attributes_1_id" name="person[bar_memberships_attributes][1][id]" type="hidden" value="825" />'
FIELD

何か案が?

4

2 に答える 2

0

次のコードを修正しました。

= f.fields_for :bar_memberships do |bar_membership_fields|
  - if bar_membership_fields.object.new_record?
    = 'FIELD'

行うことによって:

= f.fields_for :bar_memberships do |bar_membership_fields|
  = ""
  - if bar_membership_fields.object.new_record?
    = 'FIELD'

誰かが理由を知っているなら、私に知らせてください。

于 2012-10-17T12:22:43.430 に答える
0

ブロックnil内以外のものを返す必要があります。fields_for

この問題は、mattwildigによってHaml4.0.4で修正されています

#fields_forヘルパーは、レコードごとに非表示の入力フィールドを生成し、ブロックをキャプチャした結果に追加します。通常、の戻り値はcaptureであるSafeBufferため、これはエスケープされません。ただし、ブロックがバッファに何も書き込まない場合、HamlはStringからリテラルを空で返しますcapture。非表示の入力要素はこの文字列に連結されており、残りのエントリと組み合わせると、Stringに追加されているためSafeBuffer、エスケープされます。

于 2014-04-09T05:34:50.237 に答える