2010-10-01 4 views
8

La vue:Rails 3 Helpers Forme: UTF8 et d'autres champs cachés

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

Je suis de déconner avec des aides de forme. Le code ci-dessus montre mon fichier de vue ainsi que le HTML qu'il génère. Qu'est-ce qui est avec le div divin plein de CSS en ligne bourré de champs cachés que je n'ai pas demandé explicitement? Quels paramètres entraînent la génération de ces champs? Y a-t-il un moyen pour moi de supprimer le CSS en ligne?

Répondre

18

Ces champs sont générés sous formes de rails de robustesse:

utf8=✓

Le champ caché de UTF8 assure que les valeurs de formulaire sont présentées comme UTF8. Il le fait en s'assurant qu'au moins un caractère UTF8 dans le formulaire est soumis. La plupart des navigateurs respectent le codage du document et traitent les valeurs du formulaire de la même manière, mais un navigateur a un problème. Par conséquent, utf8 obtient une coche.

Le paramètre authenticity_token est là pour empêcher la falsification de requêtes entre sites.

Des champs cachés similaires sont générés pour les cases à cocher. Comme les cases à cocher non cochées ne sont pas envoyées au serveur, un champ caché garantit qu'une valeur "0" (false) est envoyée: ceci est utile lorsque vous avez un tableau de cases à cocher.

Ces champs sont enveloppés dans un div avec des styles en ligne pour s'assurer qu'ils ne cassent pas la mise en page. Vous pourriez fouiller dans le code source de l'assistant de formulaire et le contourner, mais je ne le recommanderais pas: il est peu intrusif, et il est là pour une raison.

+2

Mais le CSS en ligne n'est pas juste. C'est moche et ça ne suit pas les standards du web. Y a-t-il d'autres développeurs qui ont ressenti cette frustration avec les helpers Ruby et trouvé une solution? –

+3

Oui c'est un compromis, mais en utilisant judicieusement CSS en ligne n'est pas contre les normes Web. Toute autre manière le rendrait dépendant de vos feuilles de style: il doit se cacher correctement indépendamment de toute autre chose dans le projet. –

+0

Le retour à la ligne div semble être supprimé dans ~ 4.1 * Supprimer div emballage avec des styles en ligne pour les champs de formulaire cachés. Nous abandonnons la conformité stricte HTML 4.01 et XHTML puisque les balises d'entrée directement à l'intérieur d'un formulaire sont valides en HTML5, et l'absence de styles en ligne aide à valider la politique de sécurité du contenu. * Https://github.com/rails/rails/blob/ed9b23d8986a2d4025913e7c56f353a579ab0189 /actionview/CHANGELOG.md –