2012-10-16 58 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,它會被轉義。