【问题标题】:*_url not working in rails 4 ActiveRecord Serializer*_url 在 rails 4 ActiveRecord 序列化器中不起作用
【发布时间】:2015-08-15 10:42:22
【问题描述】:

我得到未定义的方法:

undefined method `url' for TrackSerializer:Class

但我的目标是在我的 json 响应中包含相关对象 url 的 url

这是我的模型:

class TrackSerializer < ActiveModel::Serializer

  attributes :id, :title
  has_many :playlists
  has_one :album

  url :track

end

这是我在回复中想要达到的目标:

{
    "tracks": [
        {
            "id": 7,
            "title": "True love",
            "playlists_url": "http://localhost:3000/7/playlist",
        }
    ]
}

【问题讨论】:

  • 如果我没看错你的联想,每首曲目都会有很多播放列表。您想返回每个 Track 的 Playlist url 数组吗?
  • 是的,但我想要的是 url 而不是播放列表
  • 但我的理解是正确的,您需要一组播放列表网址,而不仅仅是您的示例所示的单个网址?
  • 是的,你是 100% 正确的

标签: model ruby-on-rails-4.2 active-model-serializers rails-api


【解决方案1】:

我会继续创建一个 PlaylistSerializer,它只返回对象的 url:

class PlaylistSerializer < ActiveModel::Serializer
  attributes :url

  def url
    Rails.application.routes.url_helpers.playlist_url(object)
  end
end

从您的 TrackSerializer 中删除 url :track

【讨论】:

  • 我已经做了上述但我gettig以下错误:未定义的方法`playlist_url
  • 嗯。应包括 URL 助手。看起来可能存在错误:“github.com/rails-api/active_model_serializers/issues/770”您可能必须对 url 进行硬编码(请参阅我已注释掉的部分)
  • 不过,URL 应该是主机敏感的。就我个人而言,我会考虑使用实现任何规范化资源定位器的 gem。
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2011-04-16
  • 2020-06-18
相关资源
最近更新 更多