Ruby on rails Rails 3表单帮助程序:UTF8和其他隐藏字段

Ruby on rails Rails 3表单帮助程序:UTF8和其他隐藏字段,ruby-on-rails,forms,views,Ruby On Rails,Forms,Views,观点: <%= form_for :blog_post do |f| %> <ul> <li> <%= f.label :title %> <%= f.text_field :title, :type => 'text', :id => 'title', :size => '', :limit => '255' %> </li> </ul>

观点:

<%= form_for :blog_post do |f| %>
  <ul>
    <li>
      <%=  f.label :title %>
      <%= f.text_field :title, :type => 'text', :id => 'title', :size => '', :limit => '255' %>
    </li>

  </ul>
<% end %>

<!DOCTYPE html> 
    <html> 
    <head> 
      <title>LevihackwithCom</title> 
      <script src="/javascripts/prototype.js?1285902540" type="text/javascript"></script> 
      <script src="/javascripts/effects.js?1285902540" type="text/javascript"></script> 
      <script src="/javascripts/dragdrop.js?1285902540" type="text/javascript"></script> 
      <script src="/javascripts/controls.js?1285902540" type="text/javascript"></script> 
      <script src="/javascripts/rails.js?1285902540" type="text/javascript"></script> 
      <script src="/javascripts/application.js?1285902540" type="text/javascript"></script> 
      <meta name="csrf-param" content="authenticity_token"/> 
      <meta name="csrf-token" content="UnhGSHHanJHfgJYhnksqJ1bfq3W+QEU2GJqLAMs2DmI="/> 
    </head>

    <body> 

    <form accept-charset="UTF-8" action="/blog_post/new" method="post">
      <div style="margin:0;padding:0;display:inline">
        <input name="utf8" type="hidden" value="&#x2713;" />
        <input name="authenticity_token" type="hidden" value="UnhGSHHanJHfgJYhnksqJ1bfq3W+QEU2GJqLAMs2DmI=" />
      </div> 
      <ul> 
        <li> 
          <label for="blog_post_title">Title</label> 
          <input id="title" limit="255" name="blog_post[title]" size="" type="text" /> 
        </li> 
      </ul> 
    </form> 

    </body> 
    </html> 

  • '文本',:id=>'标题',:size=>'',:limit=>'255'>
LevihackwithCom
  • 标题

我在和表格助手混日子。上面的代码显示了我的视图文件以及它生成的HTML。这个可怕的div充满了内联CSS,里面塞满了我没有明确要求的隐藏字段,这是怎么回事?哪些设置导致生成这些字段?有没有办法删除内联CSS?

这些字段是以rails表单生成的,以增强健壮性:

utf8=✓

utf8隐藏字段确保表单值作为utf8提交。它通过确保表单中至少有一个UTF8字符被提交来实现这一点。大多数浏览器尊重文档的编码,并将表单值视为相同的值,但有一个浏览器存在问题。因此,utf8得到一个复选标记

真实性令牌用于防止跨站点请求伪造

为复选框生成类似的隐藏字段。由于未选中的复选框不会提交到服务器,因此隐藏字段可确保提交“0”(false)值:这在具有复选框数组时非常有用


这些字段被包装在带有内联样式的div中,以确保它们不会破坏布局。您可以在form helper源代码中浏览并覆盖它,但我不建议这样做:它的侵入性最小,而且它的存在是有原因的。

如果您想摆脱
utf8=✓
您可能对这个gem感兴趣,它只将它添加到不符合要求的浏览器中:

但是内联CSS不正确。它很难看,而且不符合网络标准。有没有其他开发人员对Ruby表单助手感到失望并找到了解决方案?是的,这是一个折衷方案,但明智地使用内嵌CSS并不违反web标准。任何其他方法都会使其依赖于您的样式表:它需要独立于项目中的任何其他内容正确隐藏。在~4.1中删除隐藏表单字段的带内联样式的包装div时,似乎会删除div包装。我们正在放弃HTML4.01和XHTML的严格遵从性,因为直接在表单中的输入标记是有效的HTML5,并且缺少内联样式有助于验证内容安全策略。另请参见pull请求问题