2012-10-16 40 views
0

这是一个带有HAML的Rails 3应用程序。 我有以下内容:if-block in fields_for呈现HTML转义的隐藏字段

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

我已经封装了这个问题。此代码打印: FIELD FIELD FIELD 按预期。

但下面的代码:

= 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 

任何想法?

回答

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' 

如果有谁知道这是为什么,请让我知道。

0

您必须在fields_for块中返回除nil以外的其他值。

This issue has been fixed in Haml 4.0.4 by mattwildig

#fields_for辅助产生用于每一个记录,它增加了捕获块的结果的隐藏的输入字段。通常capture的返回值将是SafeBuffer,所以这不会被转义。但是,如果该块没有向缓冲区写入任何内容,那么Haml将从capture返回空字符String。隐藏的输入元素被复制到此字符串,并且当它与其余条目结合时,由于它被添加到SafeBuffer中的String,它会被转义。