2011-12-12 10 views
40

Ruby On Railsでjquery-mobileを使用しています。Rubyシンボルでダッシュ " - "をエスケープするには?

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"表記を使用する必要があります?

(私はそれが化粧品の質問です同意するが、私は自分のコードが矛盾しないようにしたいと例外を好きではありません)

答えて

73

使用単一引用符をシンボル名の前後に、コロン接頭辞:

:'data-role' => 'button' 

ここで記号の良い参照:

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

+2

または二重引用符 - いずれか正常に動作します。また、[1.9代替ハッシュ構文でそのような方法でエスケープされたシンボルを使用することはできません](http://stackoverflow.com/questions/2134702/ruby-1-9-hash-with-a-dash- – arcresu

+0

ありがとうございました、私は最も完全な回答に投票しましたが、すべての貢献を歓迎しました! :) –

+2

習慣として、私は通常、文字列補間があるときは二重引用符を使用し、文字列が不変でなければならないときは単一引用符を使用します。 –

3

単一引用符で包み:

:'data-role' => "button" 
2
<%= link_to "Play", game_play_path, :"data-role" => "button" %> 
+1

または代わりにまっすぐ文字列 '「データ役割を」'を使用:データ-何かの属性

また、あなたはより多くを持っている場合は、ネストされたハッシュに同様にそれらを書くことができます。それがシンボルである必要はありません。 #codegolf –

12

あなたは構文に<%= link_to "Play", game_play_path, :"data-role" => "button" %>醜いを見つけた場合、それは古いハッシュ構文を使用しているため、ハッシュのためのRuby 1.9の構文を使用することを含む、それを行うための別の方法は、次の操作を実行することです:

<%= link_to "Play", game_play_path, data: {role: "button"} %> 

ハッシュのイミディエイションは、html出力のデータとロールの間にハイフンを生成します。

これはデータの属性のみで動作するため、注意してください。しかし、あなたの場合はもっと気に入っています。

<%= link_to "Play", game_play_path, data: {role: "button", other1: "value1", other2: "value2"} %> 
関連する問題