Как создать привязку и перенаправить на этот конкретный якорь в Ruby on Rails
Я пытаюсь создать уникальные привязки для каждого комментария в своем блоге, чтобы человек мог взять URL-адрес якоря и вставить его в свой браузер, который будет автоматически загружать страницу и прокручиваться вниз до точки на странице, где их комментарий начинается.
Возможно, я поступил неправильно, но я пробовал это, но это не помогло.
Комментарий - Fail 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
Если кто-то может помочь, я буду очень благодарен:)
UPDATE: решения ниже почти работают, однако я получаю следующий URL-адрес, который не прокручивается, если я нажму на него.
#
то есть http://localhost:3000/posts/please-work
Ответы
Ответ 1
Похоже, вы хотите использовать код 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, который вы передаете, для этого тега.
Ответ 2
Собственно, привязка является опцией для пути, а не для 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>
Ответ 3
Здесь улучшается ответ @XGamerX.
<%= link_to '#', [comment.post, { anchor: dom_id(comment) }] %>
или
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment)) %>
Ответ 4
Попробуйте следующее:
<%= link_to '#', post_path(comment.post), :anchor => "comment_#{comment.id}" %>
Ответ 5
это лучший способ:
<%= link_to '#', post_path(comment.post, anchor: dom_id(comment.id)) %>
Ответ 6
Эти ссылки будут прокручиваться до позиции, где у вас есть код:
<a name="comment_1"></a>
Я не знаю, есть ли помощники, которые сделают это для вас, но это очень просто, и вы можете написать свой собственный.