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

Url Helpers в ActiveModelSerializer 0.10.0?

Я знаю, что эта версия до сих пор официально не выпущена, но сегодня я проверял rc3, и я заметил, что больше не могу использовать помощников URL-адресов Rails внутри своих сериализаторов. В версии 0.8.x я мог бы сделать следующее:

class BrandSerializer < BaseSerializer
  attributes :id, :name, :slug, :state
  attributes :_links

  def _links
    {
      self: api_v1_company_brand_path(object.company_id, object.id),
      company: api_v1_company_path(object.company_id),
      products: api_v1_company_brand_products_path(object.company_id, object.id)
    }
  end

end

Но это не выход в новую версию. Какой лучший способ разрешить это, чтобы я мог поддерживать ссылки в своем сериализаторе?

Изменить: Пока я делаю следующее, но мне хотелось бы услышать, есть ли более идиоматический способ.

class BaseSerializer < ActiveModel::Serializer
  include Rails.application.routes.url_helpers
4b9b3361

Ответ 1

Если вы добавите это в свой ApplicationController или, возможно, к контроллеру, генерирующему ответ:

serialization_scope :view_context

Затем вы можете использовать view_context в сериализаторе для доступа к помощникам URL (или любым способом просмотра).

Пример: view_context.api_v1_company_brand_path(object.company_id, object.id)

Я думал, что это, вероятно, более чистое, чем включение всех этих помощников URL и т.д. в класс serialiser.

Ответ 2

включая библиотеку, которая была исключена (как вы это сделали), наиболее определенно будет самым коротким маршрутом (вне пересмотра самого драгоценного камня, с точки зрения идиоматизма)