Qual é a maneira certa de definir uma etiqueta de âncora em trilhos?
-
21-09-2019 - |
Pergunta
É óbvio do documentação (e Google) Como gerar um link com um segmento, por exemplo, podcast/5#comments
. Você apenas passa um valor para :anchor
para link_to
.
Minha preocupação é com a tarefa muito mais simples de gerar o <a name="comments">Comments</a>
Tag IE O destino do primeiro link.
Eu tentei o seguinte e, embora eles parecessem funcionar, a marcação não era o que eu esperava:
link_to "Comments", :name => "comments"
link_to "Comments", :anchor => "comments"
Acho que estou perdendo algo óbvio. Obrigado.
Solução
Você está ficando confuso com o açúcar sintático de Ruby (que o Rails usa profusamente). Deixe -me explicar isso brevemente antes de responder sua pergunta.
Quando uma função rubi leva um único parâmetro que é um hash:
def foo(options)
#options is a hash with parameters inside
end
Você pode 'esquecer' de colocar os parênteses/colchetes e chamá -lo assim:
foo :param => value, :param2 => value
Ruby preencherá os espaços em branco e entenderá que o que você está tentando realizar é o seguinte:
foo({:param => value, :param2 => value})
Agora, para sua pergunta: link_to
leva dois Hashes opcionais - um é chamado options
e o outro html_options
. Você pode imaginá -lo definido assim (esta é uma aproximação, é muito mais complexo)
def link_to(name, options, html_options)
...
end
Agora, se você invocar desta maneira:
link_to 'Comments', :name => 'Comments'
Ruby ficará um pouco confuso. Ele tentará "preencher os espaços em branco" para você, mas incorretamente:
link_to('Comments', {:name => 'Comments'}, {}) # incorrect
Vai pensar que name => 'Comments'
parte pertence a opções, não a html_options
!
Você tem que ajudar Ruby preenchendo os espaços em branco. Coloque todos os parênteses em vigor e isso se comportará conforme o esperado:
link_to('Comments', {}, {:name => 'Comments'}) # correct
Você pode realmente remover o último conjunto de colchetes, se quiser:
link_to("Comments", {}, :name => "comments") # also correct
Para usar o HTML_Options, você deve deixar o primeiro conjunto de colchetes. Por exemplo, você precisará fazer isso para um link com a mensagem de confirmação e o nome:
link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")
Outros ajudantes de trilhos têm uma construção semelhante (ou seja, form_for
, collection_select
) Então você deve aprender essa técnica. Em dúvida, basta adicionar todos os parênteses.
Outras dicas
Se você quiser passar por trilhos, sugiro content_tag
(documentos).
Exemplo:
content_tag(:a, 'Comments', :name => 'comments')
<%= link_to('new button', action: 'login' , class: "text-center") %>
Criou uma tag de âncora para login.html ig
<a href="login.html" class = "text-center"> new button </a>
e para
<a href="admin/login.html" class = "text-center"> new button </a>
usar
<%= link_to('new button', controller: 'admin',
action: 'login' , class: "text-center") %>