2013-02-02 14 views
12

Ho cercato in giro come aggiungere un selettore ad un link_to utilizzando haml, è possibile?Rails e haml, come aggiungere id e selettori di classe a link_to helper?

a .haml - %a#booked{:href => "index.haml"} Link 1  

    b .html.erb - booking.html.erb - <%= link_to "Link 1", booking_path, :id => "booked" %> 

    c .haml.erb - booking.haml.erb - ...?? 

Quale sarebbe l'equivalente di b in haml?

risposta

25

link_to funziona esattamente allo stesso modo in haml come in erb. Quindi questo sarà fare quello che vuoi:

= link_to "Link 1", booking_path, :id => "booked" 
#=> <a id="booked" href="/bookings">Link 1</a> 

È inoltre possibile assegnare un attributo di classe in questo modo:

= link_to "Link 1", booking_path, :id => "booked", :class => "some_class" 
#=> <a id="booked" class="some_class" href="/bookings">Link 1</a> 

Di più su come inserire il codice Ruby in Haml: Inserting ruby

E, perché non ci sono dubbi passando ids e classi per link_to, qui è un esempio from the docs:

link_to "Articles", articles_path, :id => "news", :class => "article" 
#=> <a href="/articles" class="article" id="news">Articles</a> 
+0

Ciao @shioyama, quell'approccio aggiungerà un id l'url. e quello che sto cercando è aggiungere un selettore di id come link 1. – evanx

+1

Questo è esattamente ciò che farà: 'Link 1'. Non lo aggiungerà all'URL. –

+0

Ho aggiunto un esempio dai documenti su 'link_to', come si può vedere l'ID' verrà assegnato correttamente al tag 'a', non aggiunto all'URL. –

4

Per aggiungere un selettore di id in haml usando link_to devi specificare due hash.

e.g = link_to "Link 1", {booking_path, extra arg...}, {:id => 'booked'} 

Un'importante linguaggio Ruby è modalità poesie: la possibilità di omettere parentesi e le parentesi graffe quando l'analisi è ambigua. Più comunemente, i programmatori di Ruby possono omettere le parentesi attorno agli argomenti di una chiamata al metodo e omettere le parentesi graffe quando l'ultimo argomento di una chiamata al metodo è un hash. Quindi le seguenti due chiamate di metodo sono equivalenti, dato un metodo link_to che accetta un argomento di stringa e un hash argomento:

Senza graffe, non c'è modo per dire se questa chiamata sta cercando di passare un hash con due chiavi o due hash di una chiave ciascuno. Quindi la modalità poesia può essere usata solo quando c'è un singolo argomento di hash ed è l'ultimo argomento.

Patterson, David; Fox, Armando (2012-08-24). Software di ingegneria duratura: un approccio agile che utilizza SaaS e Cloud Computing, Beta Edition (posizioni Kindle 1973-1975). Strawberry Canyon LLC. Edizione Kindle.

+0

Non è * necessario * passare due hash per questo caso, 'link_to" Link 1 ", booking_path,: id =>" prenotato "' funzionerà correttamente. –

+0

Grazie per aver usato le parentesi graffe, non usarle è il motivo per cui questo non ha funzionato per me. '<% = link_to 'Video Index', controller: 'videos',: id => 'index'%>' output 'Video Index' ma cambiandolo in questo '{controller: 'videos'}' rende correttamente l'output 'Video Index ' –