Как вернуть массив вместо массива объекта в rails json response - PullRequest
0 голосов
/ 30 мая 2019

У меня есть модель с ассоциацией download has_many download_links

Я звоню download_links в контроллере downloadlink.

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

результат в почтальоне простокак это:

{
"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"}

1 Ответ

0 голосов
/ 30 мая 2019

Учитывая 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

In 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

Исправьте имя / ассоциацию каксогласно вашему соглашению об именах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...