Как создать якорь и перенаправить на этот конкретный якорь в Ruby on Rails
Я пытаюсь создать уникальные якоря для каждого комментария в моем блоге, чтобы человек мог взять URL-адрес якоря и вставить его в свой браузер, который автоматически загрузит страницу и прокрутит вниз до точки на странице, где начинается его комментарий,
Возможно, я поступаю неправильно, но я попробовал это, но безрезультатно.
Представление комментария - ошибка 1 - при вставке в браузер эта ссылка не прокручивается вниз до нужной позиции
<%= link_to '#', :controller => 'posts', :action => 'show', :id => comment.post, :anchor => 'comment_' << comment.id.to_s %>
Контроллер комментариев - Ошибка 2 - Исправьте URL в браузере, но прокрутка не происходит, он просто остается в верхней части страницы
redirect_to :controller => 'posts', :action => 'show', :id => @post, :anchor => 'comment_' + @comment.id.to_s
Если бы кто-то мог помочь, я был бы очень благодарен:)
ОБНОВЛЕНИЕ: Решения, представленные ниже, почти работают, однако я получаю следующий URL, который не будет прокручен, если я нажму на него.
6 ответов
Похоже, вы хотите использовать link_to
код, который у вас есть в вашем вопросе. Затем в вашем списке комментариев вы должны убедиться, что у вас есть якорный тег, названный той же самой ссылкой.
Итак, это:
<%= link_to 'Your comment', post_path(@comment.post) + "#comment_#{@comment.id.to_s}" %>
будет генерировать что-то вроде этого
<a href="localhost:3000/posts/2#1comment_234">Your comment</a>
/* html code */
<a name="comment_1234">This is a comment</a>
Вы должны вручную прикрепить #comment_
в противном случае метод link_to считает, что передаваемый им атрибут:anchor предназначен для этого тега.
На самом деле, якорь является опцией для пути, а не для link_to
<%= link_to '#', post_path(comment.post, :anchor => "comment_#{comment.id}") %>
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html
link_to "Comment wall", profile_path(@profile, :anchor => "wall")
# => <a href="/profiles/1#wall">Comment wall</a>
Вот улучшение ответа @XGamerX.
<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %>
Или же
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %>
Это лучший способ:
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>
Попробуй это:
<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %>
Эти ссылки будут прокручиваться вниз до позиции, где у вас есть такой код:
<a name="comment_1"></a>
Я не знаю, есть ли помощники, которые сделают это за вас, но это очень просто, и вы можете написать свой собственный.