Pergunta

Eu estou tentando criar âncoras únicas para cada comentário no meu blog assim que uma pessoa pode tomar a url de uma âncora e colá-lo em seu navegador, que irá carregar automaticamente a página e desça até o ponto na página onde seu comentário começa.

Talvez eu vou sobre este o caminho errado, mas eu tentei isso que era sem sucesso.

Vista Comentário - Falha 1 - quando colado em um navegador este link não desça até a posição desejada

<%= link_to '#', :controller => 'posts', :action => 'show', :id => comment.post, :anchor => 'comment_' << comment.id.to_s %>

Comentários controlador - Falha 2 - URL correta no navegador, mas não rolagem acontece apenas permanece no topo da página

redirect_to :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_' + @comment.id.to_s

Se alguém pudesse ajudar eu ficaria muito grato:)

UPDATE: As soluções abaixo quase trabalho, no entanto eu não saia com a seguinte URL que não está sendo rolada para se eu clicar sobre ele.

# ou seja, http: // localhost: 3000 / posts / por favor o trabalho

Foi útil?

Solução

Parece que você quiser usar o código link_to que você tem na sua pergunta. Em seguida, na lista de comentários que você tem que ter certeza que você tem uma marca de âncora nomeada a mesma coisa no link.

Portanto, esta:

 <%= link_to 'Your comment', post_path(@comment.post) + "#comment_#{@comment.id.to_s}" %>

irá gerar algo como isto

 <a href="localhost:3000/posts/2#1comment_234">Your comment</a>

 /* html code */     

 <a name="comment_1234">This is a comment</a>

Você tem que tack manualmente no #comment_ caso contrário o método link_to pensa que o:. Atributo de âncora que você está passando é por essa tag

Outras dicas

Na verdade, âncora é uma opção para o caminho, não para o link_to

<%= link_to '#', post_path(comment.post, :anchor => "comment_#{comment.id}") %>

http://api.rubyonrails.org/classes/ActionView/ helpers / UrlHelper.html # M001565

link_to "Comment wall", profile_path(@profile, :anchor => "wall")
       # => <a href="/profiles/1#wall">Comment wall</a>

Aqui está uma melhoria na resposta da @ XGamerX.

<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %>

ou

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %>

Tente isto:

<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %>

este é o melhor caminho:

<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>

Estas ligações vão rolar para baixo para a posição onde você tem um código como:

<a name="comment_1"></a>

Eu não sei se existem ajudantes que vão fazer isso para você, mas é muito simples e você pode escrever seu próprio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top