Переопределить вспомогательные методы маршрута - PullRequest
14 голосов
/ 05 марта 2011

Вопрос имеет много комментариев.

URL "questions / 123" показывает вопрос.

A URL:

"questions / 123 # answer-345 "

показывает вопрос и выделяет ответ.345 - это идентификатор модели ответа, "answer-345" - это атрибут id элемента HTML.

Мне нужно переопределить метод "answer_path (a)", чтобы получить

"вопросы/ 123 # answer-345 "

вместо

" answers / 345 "

Как это сделать?

Ответы [ 2 ]

16 голосов
/ 05 марта 2011

Все вспомогательные методы url и path принимают необязательные аргументы.
То, что вы ищете, это аргумент anchor:

question_path(123, :anchor => "answer-345")

Это задокументировано в URLHelper # link_to examples .

Используя этот аргумент, вы сможете создать answer_path помощник с помощью:

module ApplicationHelper

  def answer_path(answer)
    question_path(answer.question, :anchor => "answer-#{answer.id}")
  end

end
0 голосов
/ 28 апреля 2016

Предложение решения, которое охватывает больше областей (работает не только в представлениях, но и в контроллере / консоли)

module CustomUrlHelper
  def answer_path(answer, options = {})
    options.merge!(anchor: "answer-#{answer.id}")
    question_path(answer.question, options)
  end
end

# Works at Rails 4.2.6, for earliers versions see http://stackoverflow.com/a/31957323/474597
Rails.application.routes.named_routes.url_helpers_module.send(:include, CustomUrlHelper)
...