fields_for中的if-block正在呈现HTML转义的隐藏字段

时间:2012-10-16 13:22:27

标签: ruby ruby-on-rails-3 haml

这是一个带有HAML的Rails 3应用程序。 我有以下内容:

= f.fields_for :bar_memberships do |bar_membership_fields|
  = '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

有什么想法吗?

2 个答案:

答案 0 :(得分: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'

如果有人知道为什么请告诉我。

答案 1 :(得分:0)

您必须在nil区块中返回fields_for以外的其他内容。

This issue has been fixed in Haml 4.0.4 by mattwildig

  

#fields_for助手为每条记录生成一个隐藏的输入字段,并将其添加到捕获块的结果中。通常,capture的返回值为SafeBuffer,因此不会对其进行转义。但是,如果块没有向缓冲区写入任何内容,则Haml会从String返回文字空capture。隐藏的输入元素与此字符串相连,当它与其他条目组合时,由于它是String被添加到SafeBuffer,它将被转义。