Ошибка Active Model Serializers при создании атрибутов URL с v0.9.3

Я пытаюсь сделать что-то очень простое в AMS, где я генерирую атрибут url для объекта, как показано ниже:

class DeckSerializer < ActiveModel::Serializer
  attributes :id, :title, :description, :url

  has_one :user
  has_many :cards

  def url
    deck_url(object)
  end
end

Однако я получаю следующую ошибку:

ArgumentError: Отсутствует хост для ссылки! Укажите параметр :host, установите default_url_options[:host] или установите для :only_path значение true

В настоящее время я использую Rails 4.2.0 и AMS 0.9.3.

Кто-нибудь знает, что происходит?


person Jshoe523    schedule 09.11.2015    source источник


Ответы (3)


Это самодельный способ решить эту проблему. Создайте поле в модели для хранения URL-адреса. затем, после того, как объект был сохранен, вы обновляете его вручную сгенерированным URL-адресом, подобным этому. вот как я это решил.

if @questionsolution.save
generatedurl = 'http://localhost:3000/questionsolutions/' + @questionsolution.id.to_s
        @questionsolution.update(solutionurl: generatedurl)
end

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

person Bernard Lomo    schedule 06.01.2019

Оказывается, это известная ошибка, упомянутая здесь:

https://github.com/rails-api/active_model_serializers/issues/573

Я переключил версию AMS на 0.8.3 и все заработало. Хотя это и не полное решение, но пока оно работает. Интересно услышать мысли других

person Jshoe523    schedule 09.11.2015

Вы должны поместить Rails.application.routes.default_url_options[:host] = 'localhost:3000' в config/environments/development.rb

person Aschen    schedule 01.12.2016