Как избежать тире "-" в символе Ruby?
Я использую jquery-mobile с Ruby On Rails.
Я хочу создать ссылку на кнопку, которая подразумевает наличие data-role="button"
в сгенерированном HTML.
Я пробовал:
<%= link_to "Play", game_play_path, :data-role => "button" %>
Но тогда я получаю сообщение об ошибке
undefined local variable or method `role' for #<#<Class:0x007fdc25668ee8>:0x007fdc25658610>
Есть ли способ выйти из тире с использованием нотации :xxx
или просто использовать нотацию "xxx"
?
(Я согласен с этим косметический вопрос, но я хочу, чтобы мой код был последовательным и не любил исключений)
Ответы
Ответ 1
Используйте одинарные кавычки вокруг имени символа с префиксом двоеточия:
:'data-role' => 'button'
И вот хорошая ссылка на символы:
http://www.troubleshooters.com/codecorn/ruby/symbols.htm#_What_do_symbols_look_like
После Ruby 1.9
вы также можете сделать
'data-role': 'button'
Ответ 2
Если вы обнаружите синтаксис <%= link_to "Play", game_play_path, :"data-role" => "button" %>
уродливый, потому что он использует синтаксис старого хеша, другой способ сделать это, который включает использование синтаксиса ruby 1.9 для хэшей, состоит в том, чтобы сделать следующее:
<%= link_to "Play", game_play_path, data: {role: "button"} %>
Хеширование символов генерирует дефис между данными и ролью в выходе html.
Будьте осторожны, потому что это работает только с атрибутами data-something, но в вашем случае это более приятная альтернатива.
Кроме того, если у вас есть больше атрибутов data-something, вы также можете записать их во вложенном хеше:
<%= link_to "Play", game_play_path, data: {role: "button", other1: "value1", other2: "value2"} %>
Ответ 3
Оберните его в одинарные кавычки:
:'data-role' => "button"
Ответ 4
<%= link_to "Play", game_play_path, :"data-role" => "button" %>