Как добавить атрибуты данных HTML5 в тег метки метки рельсов?

У меня есть рельсовая форма, которая имеет этот код:

<%= form_tag("../vehicles", method: "get") do %>
  <div>
    <div>
      <%= label_tag(:address, t("ui.reservations.pickup"), data-addr: 'here') %>
    </div>
    <div>
      <%= label_tag(:address, t("ui.reservations.between_now_and_param", param: @start_date.strftime(    time_format))) %>
    </div>
    <div>

Я хочу добавить атрибут данных HTML к первой метке, поэтому я попытался:

<%= label_tag(:address, t("ui.reservations.pickup"), data-addr: 'here') %>

но я получаю синтаксическую ошибку:

СинтаксисError в резервировании # новый

.../_form.html.erb:8: syntax error, unexpected tLABEL

');@output_buffer.append= ( label_tag(:address, t("ui.reservations.pickup"), data-addr: 'here') );@output_buffer.safe_concat('...

Я могу добавить его как

    <%= label_tag(:address, t("ui.reservations.pickup"), data: 'here') %>

Это генерирует:

<label for="address" data="here">

но я не могу добавить атрибуты data-something. Я получаю синтаксическую ошибку.

Как я могу это сделать?

Ответ 1

Ответ, предоставленный @vee, сделает это правильно. Причина, по которой вы получаете синтаксическую ошибку, состоит в том, что data-addr: 'here' недействительный рубиновый код. То есть вы не можете использовать хэш-запись JSON с ключом, содержащим символ дефиса. Вы можете изменить его для правильной работы следующим образом:

<%= label_tag(:address, t('ui.reservations.pickup'), 'data-addr' => 'here' %>

Но рекомендуемый подход заключается в объявлении вложенного хэша для атрибутов данных:

<%= label_tag(:address, t('ui.reservations.pickup'), :data => {:addr => 'here'} %>

Или просто (по предложению @vee):

<%= label_tag(:address, t('ui.reservations.pickup'), data: {addr: 'here'} %>

[Редактирование OP:] Я также обнаружил, что символы подчеркивания генерируют тире! Например:

<%= label_tag(:address, t('ui.reservations.pickup'), data: {from_base: 'here'} %>

генерирует

<label for="address" data-from-base="here">
    pickup:
</label>

Ответ 2

Используйте хэш data следующим образом:

<%= label_tag(:address, t("ui.reservations.pickup"), data: {addr: 'here'}) %>
# => <label data-addr="here" for="address">...</label>