Как добавить атрибуты данных 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>