2010-11-23 23 views
86

El problema, por supuesto, es que a los símbolos ruby ​​no les gustan los guiones. Así que algo como esto, obviamente, no va a funcionar:¿La mejor manera de usar los atributos de datos html5 con los rieles content_tag helper?

content_tag(:div, "Some Text", :id => "foo", :data-data_attr => some_variable) 

Una opción es usar una cadena en lugar de un símbolo:

content_tag(:div, "Some Text", :id => "foo", 'data-data_attr' => some_variable) 

O podría interpolar:

"<div id='foo' data-data_attr='#{some_variable}'>Some Text</div>".html_safe 

I Sorta prefiere el más tarde, pero ambos parecen un poco asquerosos. Alguien sabe de una mejor manera?

Respuesta

128

Rails 3.1 naves con una función de ayudantes:

http://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-tag

Por ejemplo,

tag("div", :data => {:name => 'Stephen', :city_state => %w(Chicago IL)}) 
# => <div data-name="Stephen" data-city-state="[&quot;Chicago&quot;,&quot;IL&quot;]" /> 
+0

Esto solo agrega cosas a mi URL. No agrega un atributo de datos. –

+2

Por supuesto que sí .... Pero si está usando un helper que necesita tanto un hash de url como un hash de opciones de html, tiene que ajustar explícitamente ambos hash entre llaves {}. link_to por ejemplo: link_to "label", {: action => blub}, {: data => {: foo =>: bar},: class => "test"} – reto

+0

Esto funciona: 'data-bv-notempty -message '=> "El nombre de usuario es obligatorio" – Ivan

57

¿Ha intentado utilizar comillas con el símbolo? Algo así como:

:"data-foo" => :bar 
+1

Mejor respuesta aquí! – imjp

+1

Dale a este hombre la aceptación. – JellicleCat

+3

No veo la diferencia a la segunda sugerencia de PO ... – reto

-3

Siempre se puede crear propia función auxiliar por lo que entonces se puede escribir

<%= div_data_tag the_id, some_text, some_data %> 
9

Un ayudante no es una mala idea, pero parece un poco de una exageración para lo que es esencialmente yo siendo fusy acerca sintaxis. Supongo que no hay nada integrado en los rieles, que es lo que estaba esperando. Voy a usar esto:

content_tag(:div, "Some Text", :id => "foo", 'data-data_attr' => some_variable) 
5

jQuery Aire (codeschool.com) Nivel 1 , Ejemplo 1

Codeschool/versión independiente de la plataforma

<section id="tabs"> 
    <ul> 
    <li><a href="#2012-09-27" data-flights="6">Sep 27</a></li> 
    <li><a href="#2012-09-28" data-flights="5">Sep 28</a></li> 
    <li><a href="#2012-09-29" data-flights="5">Sep 29</a></li> 
    </ul> 
</section> 

rieles Versión

<section id="tabs"> 
    <ul> 
    <li><%= content_tag(:a, "Sep 27",:href=> "#2012-09-27", :data => { :flights => "6" }) %></li> 
    <li><%= content_tag(:a, "Sep 28",:href=> "#2012-09-28", :data => { :flights => "5" }) %></li> 
    <li><%= content_tag(:a, "Sep 29",:href=> "#2012-09-29", :data => { :flights => "5" }) %></li> 
    </ul> 
</section> 
1

Basándose en las respuestas anteriores, aquí está la forma canónica de hacerlo ahora:

content_tag(:div, "Some Text", id: "foo", data: { attr: some_variable }) 
content_tag(:div, "Some Text", id: "foo", data: { "other-attr" => some_variable }) 

que genera:

<div id="foo" data-attr="some variable">Some Text</div> 
<div id="foo" data-other-attr="some variable">Some Text</div> 
Cuestiones relacionadas