Как указано в ActionView :: Helpers :: TagHelperdocs:
Для дружат с конвенциями JavaScript податрибута dasherized. Например, ключ user_id будет отображать как data-user-id и таким образом получить доступ как dataset.userId.
Для иллюстрации, вы можете проверить в исходном коде Rails (tag_helper.rb) prefix_tag_option
вызова key.to_s.dasherize
:
def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
#...#
content_tag_string(name, content_or_options_with_block, options, escape)
#...#
end
def content_tag_string(name, content, options, escape = true)
tag_options = tag_options(options, escape) if options
#...#
end
def tag_options(options, escape = true)
# ...
# TAG_PREFIXES = ['aria', 'data', :aria, :data].to_set
# invoke prefix_tag_option only if it's a data- sub-attributes
if TAG_PREFIXES.include?(key) && value.is_a?(Hash)
#...#
output << prefix_tag_option(key, k, v, escape)
end
#...#
end
def prefix_tag_option(prefix, key, value, escape)
key = "#{prefix}-#{key.to_s.dasherize}"
#...#
end
Если вы не хотите dasherize ключей, возможный " обходной путь « - установить data-attribute
непосредственно в вариантах хэша, например:
<%= content_tag(:div, "test", { id: 'stat', 'data-_var_': '_foo_' }) %>
Таким образом, Rails будет оказывать:
<div id="stat" data-_var_="_foo_">test</div>
Престижности @mrlew за очень подробный и дидактический ответ. Спасибо ! –
@AlbertAnstett приветствую :) – mrlew