Переопределить методы вспомогательных маршрутов

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

В URL-адресе "вопросы/123" показан вопрос.

URL:

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

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

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

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

вместо

"ответы/345"

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

Ответы

Ответ 1

Все методы помощника url и пути принимают необязательные аргументы.
Что вы ищете, это аргумент 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

Ответ 2

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

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)