使用 v0.9.3 创建 url 属性时出现活动模型序列化程序错误

Active Model Serializers error on creating url attributes with 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:缺少主机到 link 到!请提供:host参数,设置default_url_options[:host],或设置:only_path为true

我目前正在使用 Rails 4.2.0 和 AMS 0.9.3

有人知道发生了什么事吗?

原来这是这里提到的一个已知错误:

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

我将 AMS 版本切换到 0.8.3,一切正常。虽然不是一个完整的解决方案,但它暂时有效。有兴趣听取他人的想法

您必须将 Rails.application.routes.default_url_options[:host] = 'localhost:3000' 放入 config/environments/development.rb

这是解决这个问题的DIY方法。在模型上创建一个字段来存储 url。然后在保存对象后,您可以像这样使用手动生成的 url 更新它。 这是我解决它的方法。

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

然后您可以直接从资源中获取 url,而无需依赖活动模型序列化程序为您完成。