【问题标题】:How to return array instead of array of object in rails json response如何在rails json响应中返回数组而不是对象数组
【发布时间】:2019-05-30 05:44:56
【问题描述】:

我有一个具有关联的模型download has_many download_links

我在 downloadlink 控制器中调用 download_links。

  def download_links
    @downloads = Download.all
    render json: { data:@downloads.as_json(:only=>[:id],
    include: {
        :downloadlink => {:only =>:url}
      }
    ), message:"success"}, status: :ok
  end

postman 中的结果是这样的:

{
"data": [
    {
        "id": 1,
        "downloadlink": [
            {
                "url": "1920x1080.png"
            },
            {
                "url": "1366x766.png"
            },
            {
                "url": "1280x720.png"
            },
            {
                "url": "1024x768.png"
            }
        ]
    }
],
"message": "success"}

现在我想要这样的结果:

{
"data": [
    {
        "id": 1,
        "downloadlink": [
            "1920x1080.png",
            "1366x766.png",
            "1280x720.png",
            "1024x768.png"
        ]
    }
],
"message": "success"}

【问题讨论】:

  • 我的前端想要它。所以它是无效的?

标签: ruby-on-rails json postman


【解决方案1】:

考虑到download has_many download_links 关系,一种方法是:

def download_links
    @downloads = Download.includes(:download_links)
    render json: { 
       data:@downloads.map{ |d| d.download_json }, message:"success"
    }, status: :ok
  end

downlad.rb 模型中

has_many :download_links

def download_json
  self.as_json(
    only: [:id],
    methods: [:downloadlink_list]
  )
end

def downloadlink_list
  self.download_links.pluck(:url)
end

根据您的命名约定更正名称/关联。

【讨论】:

  • 如何删除没有价值的数据?
  • { "data": [ { "id": 1, "downloadlink_list": [ "1920x1080.png", "1366x766.png", "1280x720.png", "1024x768.png" ] }, { "id": 2, "downloadlink_list": [] } }
  • 我认为您不应该删除它,只需与前端团队确认,如果您删除该属性,它可能会在那里中断,因为他们将无法使用每个循环。
  • 好的先生,谢谢,顺便说一下,您能推荐任何有关采摘等的文档吗?
猜你喜欢
  • 1970-01-01
  • 2016-01-23
  • 2020-06-29
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多