Как вы используете якоря для идентификаторов в маршрутах в Rails 3? - PullRequest
33 голосов
/ 13 февраля 2011

Представьте себе блог с posts и comments. URL отдельного комментария может быть posts/741/comments/1220.

Однако я бы хотел сделать URL posts/741#1220 или даже posts/741#comment-1230.

Какой наименее навязчивый способ сделать это, чтобы redirect_to comment_path(my_comment) указывал на правильный URL?

Ответы [ 3 ]

61 голосов
/ 13 февраля 2011

Вы можете просто использовать

redirect_to post_path(comment.post, :anchor => "comment-#{comment.id}")

чтобы вручную построить URL с привязкой. Таким образом, вы можете иметь абсолютный URL для ваших комментариев как posts/:post_id/comments/:comment_id в ваших маршрутах. Вы также можете создать вспомогательный метод, например, application_controller.rb

class ApplicationController
  helper :comment_link

  def comment_link(comment)
    post_path(comment.post, :anchor => "comment-#{comment.id}")
  end
end
0 голосов
/ 15 марта 2017

Предпочитаю держать вашего якорного строителя в одном месте.

class Comment
  ...
  def anchor
    "comment-#{id}#{created_at.to_i}"
  end
end

затем

post_path(comment.post, :anchor => comment.anchor)

Добавление created_at.to_i немного затеняет ваши данные и ничего не вредит.

0 голосов
/ 13 февраля 2011

вы можете переопределить метод to_param в комментарии, чтобы сделать это.

например

def to_param
  comment.post_id.to_s + '#' + id.to_s
end

И вам придется настроить маршруты. Проверьте этот блог для получения дополнительной информации.

...