2011-12-12 9 views
40

Używam jquery-mobile z Ruby On Rails.Jak uciec z myślnika "-" w symbolu rubinu?

Chcę utworzyć łącze przycisku, co oznacza, że ​​w wygenerowanym kodzie HTML pojawia się data-role="button".

Próbowałem:

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

Ale wtedy pojawia się błąd

undefined local variable or method `role' for #<#<Class:0x007fdc25668ee8>:0x007fdc25658610> 

Czy istnieje sposób, aby uciec kreskę za pomocą notacji :xxx czy mam po prostu użyć notacji "xxx" ?

(zgadzam się, że jest to kwestia kosmetyczna, ale chcę mojego kodu być spójne i nie lubią wyjątki)

Odpowiedz

73

apostrofów wokół nazwy symbolu z prefiksem dwukropka:

:'data-role' => 'button' 

A oto ładny odnośnik do symboli:

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

+2

Lub podwójny cudzysłów - albo działa dobrze. Zauważ też, że [nie możesz użyć symbolu uciekającego w taki sposób z alternatywną składnią skrótu 1.9) (http://stackoverflow.com/questions/2134702/ruby-1-9-hash-with-a-dash- in-a-key) – arcresu

+0

Dziękuję wszystkim, głosowałem za najbardziej kompletnymi odpowiedziami, ale wszystkie opinie były mile widziane! :) –

+2

Zwykle używam podwójnych cudzysłowów, kiedy będzie interpolacja ciągów i pojedyncza, gdy ciąg powinien być niezmienny. –

3

owinąć go w apostrofach:

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

Lub alternatywnie wykorzystać prosty łańcuch '„data-rolę”'. Nie ma potrzeby, aby był symbolem. #codegolf –

12

Jeśli znajdziesz składnię <%= link_to "Play", game_play_path, :"data-role" => "button" %> brzydki, ponieważ używa starej składni hash, inny sposób to zrobić, który polega na użyciu Ruby 1.9 składni dla mieszań jest wykonanie następujących czynności:

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

Hashowanie mieszania generuje łącznik między danymi a rolą w wynikach html.

Zachowaj ostrożność, ponieważ działa to tylko z atrybutami danych-danych, ale w Twoim przypadku jest to bardziej przyjemna alternatywa dla oka.

Ponadto, jeśli masz więcej danych coś atrybutów, można zapisać je także w zagnieżdżonej hash:

<%= link_to "Play", game_play_path, data: {role: "button", other1: "value1", other2: "value2"} %>