Pregunta

Es obvio desde el documentación (y Google) cómo para generar un enlace con un segmento por ejemplo, podcast/5#comments. Usted sólo tiene que pasar un valor para :anchor a link_to.

Mi preocupación es acerca de la tarea mucho más sencilla de generar la etiqueta <a name="comments">Comments</a> es decir, el destino del primer enlace.

He intentado lo siguiente, y aunque parecía funcionar, el margen de beneficio no era lo que esperaba:

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

Creo que me estoy perdiendo algo obvio. Gracias.

¿Fue útil?

Solución

se está confundiendo por el azúcar sintáctica de Ruby (que Rails utiliza profusamente). Voy a explicar esto brevemente antes de responder a su pregunta.

Cuando una función rubí toma un único parámetro que es un hash:

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

Puede 'olvidar' para poner el paréntesis / soportes, y lo llaman así:

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

Ruby llenar los espacios en blanco y entender que lo que está tratando de lograr es la siguiente:

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

Ahora, a su pregunta: link_to toma dos hashes opcionales - uno se llama options y el otro html_options. Se puede imaginar que define así (esto es una aproximación, es mucho más compleja)

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

Ahora, si se invoca esta manera:

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

Rubí obtendrá un poco confundido. Se tratará de "llenar los espacios en blanco" para usted, pero de forma incorrecta:

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

Se pensará que parte name => 'Comments' pertenece a las opciones, no html_options!

Tienes que ayudar rubí por llenar los espacios en blanco usted mismo. Poner todo el paréntesis en su lugar y se comportará como se espera:

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

En realidad se puede eliminar el último par de corchetes si quieres:

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

Con el fin de utilizar html_options, tiene que salir el primer conjunto de corchetes, sin embargo. Por ejemplo, tendrá que hacer esto para un enlace con el mensaje de confirmación y el nombre:

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

Otros carriles ayudantes tienen una construcción similar (es decir form_for, collection_select) por lo que deben aprender esta técnica. En caso de duda, sólo tiene que añadir todos los paréntesis.

Otros consejos

Si usted quiere pasar por los carriles, sugiero content_tag ( docs ).

Ejemplo:

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

creado una etiqueta de anclaje para login.html i.g

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

y

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

uso

<%= link_to('new button', controller: 'admin',
    action: 'login' , class: "text-center") %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top