Подтвердить что ты не робот

Как создать привязку и перенаправить на этот конкретный якорь в 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

4b9b3361

Ответ 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>

Я не знаю, есть ли помощники, которые сделают это для вас, но это очень просто, и вы можете написать свой собственный.