2010-10-01 14 views
8

Widok:Rails 3 Forma Pomocnicy: UTF8 i innych ukrytych pól

<%= 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> 

jestem aprowizacji z pomocników formie. Powyższy kod pokazuje mój plik widoku, jak również wygenerowany przez niego kod HTML. Co jest z okropnym div pełnym wbudowanych CSSów wypełnionych ukrytymi polami, o które nie prosiłem wprost? Jakie ustawienia powodują generowanie tych pól? Czy istnieje sposób, aby usunąć wbudowany CSS?

Odpowiedz

18

Pola te są generowane w postaci szyn dla solidności:

utf8=✓

utf8 ukryte pola zapewnia, że ​​wartości formularza są przekazywane jako UTF-8. Robi to, zapewniając, że zostanie przesłany co najmniej jeden znak UTF8 w formularzu. Większość przeglądarek respektuje kodowanie dokumentu i traktuje wartości formularza tak samo, ale istnieje jedna przeglądarka, która ma problem. Stąd utf8 otrzymuje znacznik wyboru.

authenticity_token jest tam, aby zapobiec cross-site request forgery.

Podobne ukryte pola generowane są dla pól wyboru. Ponieważ niezaznaczone pola wyboru nie zostaną przesłane do serwera, ukryte pole zapewnia przesłanie wartości "0" (fałsz): jest to pomocne, gdy masz tablicę pól wyboru.

Te pola się zawinięte w div style z inline, aby zapewnić, że nie rozbić układ. Możesz przeglądać kod źródłowy pomocnika formularza i nadpisywać go, ale nie polecam go: jest to minimalnie uciążliwe i nie bez powodu.

+2

Ale CSS inline jest nie w porządku. Jest brzydki i nie spełnia standardów internetowych. Czy są inni deweloperzy, którzy odczuli tę frustrację z pomocą dla Rubiego i znaleźli rozwiązanie? –

+3

Tak, to jest kompromis, ale używanie wbudowanego CSS w rozsądny sposób nie jest niezgodne ze standardami sieci. Każdy inny sposób uzależniałby to od twoich arkuszy stylów: musi ukrywać się poprawnie niezależnie od czegokolwiek innego w projekcie. –

+0

Okładka div wydaje się być usunięta w ~ 4.1 * Usuń zawijanie div z wbudowanymi stylami dla ukrytych pól formularza. Zrzekamy się ścisłej zgodności HTML 4.01 i XHTML, ponieważ tagi wejściowe bezpośrednio w formularzu są poprawne HTML5, a brak wbudowanych stylów pomaga w sprawdzaniu poprawności dla Polityki bezpieczeństwa treści. * Https://github.com/rails/rails/blob/ed9b23d8986a2d4025913e7c56f353a579ab0189 /actionview/CHANGELOG.md –