¿La mejor manera de usar atributos de datos html5 con rails content_tag helper?


102

El problema, por supuesto, es que a los símbolos rubí no les gustan los guiones. Entonces, algo como esto obviamente no funcionará:

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 simplemente podría interpolar:

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

Prefiero el último, pero ambos parecen un poco asquerosos. ¿Alguien conoce una forma mejor?

Respuestas:


140

Rails 3.1 se envía con ayudantes integrados:

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

P.ej,

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

En realidad, esto solo agrega cosas a mi URL. No agrega un atributo de datos.
Jim Wharton

2
Por supuesto que sí ... Pero si está utilizando un ayudante que toma tanto un hash de URL como un hash de opciones html, debe envolver explícitamente ambos hash entre corchetes {}. link_to por ejemplo: link_to "etiqueta", {: action => blub}, {: data => {: foo =>: bar},: class => "test"}
respuesta

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

66

¿Ha intentado usar comillas con símbolo? Algo como:

:"data-foo" => :bar

1
@reto - verifique la fecha de respuesta.)
Eimantas

¿Por qué el colon inicial :?
Joshua Pinter

1
Los dos puntos hacen de la tecla un símbolo.
Eimantas

10

Un ayudante no es una mala idea, pero parece un poco exagerado para lo que esencialmente me desconcierta la sintaxis. Supongo que no hay nada integrado en los rieles, que es lo que esperaba. Solo usaré esto:

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

6

JQuery Air (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>

Versión de rieles

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

5

Sobre la base de las respuestas anteriores, esta es 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>

-3

Siempre puede crear su propia función de ayuda para luego escribir

<%= div_data_tag the_id, some_text, some_data %>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.