Как вы используете привязки для идентификаторов в маршрутах в Rails 3?
Представьте себе блог с posts
и comments
. URL-адрес отдельного комментария может быть posts/741/comments/1220
.
Однако я бы хотел сделать URL posts/741#1220
или даже posts/741#comment-1230
.
Какой наименее навязчивый способ сделать это, чтобы redirect_to comment_path(my_comment)
указывал на правильный URL?
Ответы
Ответ 1
Вы можете просто использовать
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
Ответ 2
Предпочитаете сохранить свой якорный строитель в одном месте.
class Comment
...
def anchor
"comment-#{id}#{created_at.to_i}"
end
end
то
post_path(comment.post, :anchor => comment.anchor)
Добавление created_at.to_i
немного скроет ваши данные и ничего не навредит.
Ответ 3
вы можете переопределить метод to_param в комментарии для этого.
например
def to_param
comment.post_id.to_s + '#' + id.to_s
end
И вам нужно будет настроить route.rb. Подробнее см. .