如何在Ruby符号中删除短划线" - "?

Dir*_*nry 51 ruby jquery-mobile ruby-on-rails-3

我在Ruby On Rails上使用jquery-mobile.

我想创建一个按钮链接,暗示data-role="button"出现在生成的HTML中.

我试过了:

<%= link_to "Play", game_play_path, :data-role => "button" %>
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个错误

undefined local variable or method `role' for #<#<Class:0x007fdc25668ee8>:0x007fdc25658610>
Run Code Online (Sandbox Code Playgroud)

有没有办法用:xxx符号来逃避破折号,还是我应该使用"xxx"符号?

(我同意这是一个美化问题,但我希望我的代码保持一致,不喜欢异常)

And*_*icz 88

在符号名称周围使用单引号,使用冒号前缀:

:'data-role' => 'button'
Run Code Online (Sandbox Code Playgroud)

这里有一个很好的符号参考:

http://www.troubleshooters.com/codecorn/ruby/symbols.htm#_What_do_symbols_look_like

  • 或双引号 - 要么工作正常.另请注意,您[不能使用以1.9替换哈希语法的方式使用符号进行转义](http://stackoverflow.com/questions/2134702/ruby-1-9-hash-with-a-dash- IN-A键) (2认同)
  • 作为一种习惯,我通常在有字符串插值的时候使用双引号,在字符串应该是不可变的时候使用单引号. (2认同)

Dan*_*tic 15

如果您发现语法<%= link_to "Play", game_play_path, :"data-role" => "button" %>难看,因为它使用旧的哈希语法,另一种方法是使用ruby 1.9语法进行哈希处理,请执行以下操作:

<%= link_to "Play", game_play_path, data: {role: "button"} %>
Run Code Online (Sandbox Code Playgroud)

哈希重叠在html输出中生成数据和角色之间的连字符.

要小心,因为这只适用于数据属性,但在你的情况下,这是一个更令人愉悦的选择.

此外,如果您有更多数据属性,您也可以在嵌套哈希中编写它们:

<%= link_to "Play", game_play_path, data: {role: "button", other1: "value1", other2: "value2"} %>
Run Code Online (Sandbox Code Playgroud)