Usted se está confundiendo por el azúcar sintáctica de Ruby (que Rails utiliza profusamente). Déjame explicarte esto brevemente antes de contestar tu pregunta.
Cuando una función de 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
Rubí llenará los espacios en blanco y comprenderá que lo que está tratando de lograr es esto:
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 incorrectamente:
link_to('Comments', {:name => 'Comments'}, {}) # incorrect
que va a pensar que name => 'Comments'
parte pertenece a las opciones, no html_options
!
Tienes que ayudar a ruby llenando los espacios en blanco tú mismo. Poner todo el paréntesis en su lugar y se comportará como se esperaba:
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
Para utilizar html_options, tiene que salir del primer conjunto de corchetes, sin embargo.Por ejemplo, tendrá que hacer esto para un enlace con el mensaje de confirmación y 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 debe aprender esta técnica. En duda, solo agregue todos los paréntesis.
Lo siento por no entender lo que claramente * * escribiste! ¡Mi error! Me alegra que hayas obtenido la respuesta que necesitabas. Quité el mío para no confundir a nadie :) –