1

我有一个喜欢的火腿;

= form_for @company, :html => {:multipart => true}, :url => update_user_company_path do |f|
  .field
    Title:#{f.text_field :name}
  = f.fields_for :attachments do |builder|
    - if builder.object.new_record?
      .field
        = builder.hidden_field :name, :value => 'logo'
        = builder.file_field :file
    - elsif builder.object.name.eql?('logo') && !builder.object.file.url.eql?('/files/original/missing.png')
      .field
        %span.thumbnail
          = link_to "Delete", delete_company_attachment_path(@company, builder.object), :method => :delete, :class => "remove_image"
          = image_tag builder.object.file.url, :style => "height:86px;width:125px"
  = f.submit 'Ok'

Chrome 按预期呈现此代码,但在 Firefox 中是这样的;

<form method="post" id="edit_company_29" enctype="multipart/form-data" class="edit_company" action="/users/25/company" accept-charset="UTF-8"><div style="margin:0;padding:0;display:inline"><input type="hidden" value="✓" name="utf8"><input type="hidden" value="put" name="_method"><input type="hidden" value="thisismytokenvalue=" name="authenticity_token"></div>
  <div class="field">
    Title:<input type="text" value="sdgdfgghjh" size="30" name="company[name]" id="company_name">
  </div>
  &lt;input id="company_attachments_attributes_0_id" name="company[attachments_attributes][0][id]" type="hidden" value="114" /&gt;&lt;input id="company_attachments_attributes_1_id" name="company[attachments_attributes][1][id]" type="hidden" value="115" /&gt;<div class="field">
    <input type="hidden" value="logo" name="company[attachments_attributes][2][name]" id="company_attachments_attributes_2_name">
    <input type="file" name="company[attachments_attributes][2][file]" id="company_attachments_attributes_2_file">
  </div>
  <input type="submit" value="Ok" name="commit">
</form>

为什么一个元素被转义。如果你检查haml,你可以看到我没有放它们。

  • 它从哪里来的?
  • 为什么会这样?
4

2 回答 2

4

哇...我刚刚遇到了类似的问题。我的猜测是,如果您将 nil 传递给 form_builder 的 fields_for,则 hidden_​​input 不会随 html_safe 返回。为了快速解决这个问题,添加一个

-else
  =""

在整个 elsif 块之后

于 2012-05-09T21:02:39.403 回答
0

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

在 @lulalala的帮助下,mattwildig在 Haml 4.0.4 中修复了这个问题。以下是对问题的解释:

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

于 2014-04-09T06:09:34.340 回答