0

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

= 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

任何想法?

4

2 回答 2

0

您必须返回块中以外nil的内容。fields_for

这个问题已由 mattwildig 在 Haml 4.0.4 中修复

助手为每条记录生成一个隐藏的#fields_for输入字段,并将其添加到捕获块的结果中。通常返回值capture是 a SafeBuffer,所以不会被转义。但是,如果块没有向缓冲区写入任何内容,则 HamlStringcapture. 隐藏的输入元素被连接到这个字符串,当它与其余条目组合时,因为它是String被添加到 a 的SafeBuffer,所以它被转义。

于 2014-04-09T05:34:50.237 回答
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 回答