Domanda

E 'evidente dalla documentazione (e Google) come per generare un link con un segmento ad esempio, podcast/5#comments. Hai appena passa un valore per :anchor a link_to.

La mia preoccupazione è circa il compito molto più semplice di generare tag <a name="comments">Comments</a> vale a dire la destinazione del primo collegamento.

Ho provato quanto segue, e anche se sembrava funzionare, il markup non era quello che mi aspettavo:

link_to "Comments", :name => "comments"
link_to "Comments", :anchor => "comments"

Credo che mi manca qualcosa di ovvio. Grazie.

È stato utile?

Soluzione

Si sono sempre confusi da zucchero sintattico di Ruby (che Rails usa abbondantemente). Mi spiego brevemente prima di rispondere alla tua domanda.

Quando una funzione rubino prende un singolo parametro che è un hash:

def foo(options)
  #options is a hash with parameters inside
end

E 'possibile 'dimenticare' di mettere la parentesi / staffe, e chiamare in questo modo:

foo :param => value, :param2 => value

Ruby compilare gli spazi vuoti e capire che cosa si sta cercando di realizzare è questo:

foo({:param => value, :param2 => value})

Ora, alla tua domanda: link_to prende due gli hash opzionale - uno è chiamato options e l'altro html_options. Si può immaginare definito come questo (questa è un'approssimazione, è molto più complessa)

def link_to(name, options, html_options)
...
end

Ora, se si richiama in questo modo:

link_to 'Comments', :name => 'Comments'

Ruby ottenere un po 'confuso. Si cercherà di "riempire gli spazi vuoti" per voi, ma in modo non corretto:

link_to('Comments', {:name => 'Comments'}, {}) # incorrect

Si penserà che parte name => 'Comments' appartiene alle opzioni, per non html_options!

Dovete aiutare rubino compilando gli spazi vuoti da soli. Mettere tutto la parentesi a posto e si comporterà come previsto:

link_to('Comments', {}, {:name => 'Comments'}) # correct

Si può effettivamente rimuovere l'ultima serie di parentesi se si desidera:

link_to("Comments", {}, :name => "comments") # also correct

Per poter utilizzare html_options, è necessario lasciare il primo set di staffe, però. Ad esempio, è necessario fare questo per un legame con il messaggio di conferma e il nome:

link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")

Altre rotaie aiutanti hanno una costruzione simile (cioè form_for, collection_select) così si dovrebbe imparare questa tecnica. In caso di dubbio, basta aggiungere tutte le parentesi.

Altri suggerimenti

Se si desidera passare attraverso le rotaie, suggerisco content_tag ( docs ).

Esempio:

content_tag(:a, 'Comments', :name => 'comments')
<%= link_to('new button', action: 'login' , class: "text-center") %>

creato un tag di ancoraggio per login.html i.g

<a href="login.html" class = "text-center"> new button </a>

e per

<a href="admin/login.html" class = "text-center"> new button </a>

utilizzo

<%= link_to('new button', controller: 'admin',
    action: 'login' , class: "text-center") %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top