Como criar uma âncora e redirecionamento para esta âncora específico em Ruby on Rails
-
09-09-2019 - |
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
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.