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.

Foi útil?

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") %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top