рельсы не получают общего значения в сериализаторе - PullRequest
0 голосов
/ 31 марта 2020

Я создал метод индекса, в котором я использую

 def index
    render json: Item.where(:location_id => 1,:item_id => 24)
 end

serializer.rb

class ItemSerializer < ActiveModel::Serializer
  attributes :location_id, :item_id, :item_groups

  def item_groups
    create_lot(location_id,item_id) //passing params suppose pass 1 & 24
  end 

  def create_lot(location_id,item_id)
    lot = {}
   Item.where(:location_id => location_id,:item_id => item_id).map do |cat|
      if lot[:"#{cat.stock_name}"].nil?
      lot[:"#{cat.stock_name}"] = bundle_lot(cat) 
      else 
      lot[:"#{cat.stock_name}"][:keys] = lot[:"#{cat.stock_name}"][:keys].push(cat.keys)
      end
    end
    lot
  end

  def bundle_lot cat
    {
      stock_name: cat.stock_name, 
      exp: cat.exp,
      keys: [].push(cat.keys),
      content: cat.content
    }
  end


end

, что приводит к сериализации как

[{
    "location_id": 1,
    "item_id": 24,
    "item_groups": {
        "abc": {
            "stock_name": "abc",
            "exp": "2021-03-29",
            "keys": ["122332", "4324324"],
            "content": 4
        },
        "kbc": {
            "stock_name": "kbc",
            "exp": "2024-03-29",
            "keys": ["6a1ds5fja1dsfj5ka1d", "4a1ds5fjkl"],
            "content": 3
        }
    }
}, {
    "location_id": 1,
    "item_id": 24,
    "item_groups": {
        "abc": {
            "stock_name": "abc",
            "exp": "2021-03-29",
            "keys": ["122332", "4324324"],
            "content": 4
        },
        "kbc": {
            "stock_name": "kbc",
            "exp": "2024-03-29",
            "keys": ["6a1ds5fja1dsfj5ka1d", "4a1ds5fjkl"],
            "content": 3
        }
    }
}, {
    "location_id": 1,
    "item_id": 24,
    "item_groups": {
        "abc": {
            "stock_name": "abc",
            "exp": "2021-03-29",
            "keys": ["122332", "4324324"],
            "content": 4
        },
        "kbc": {
            "stock_name": "kbc",
            "exp": "2024-03-29",
            "keys": ["6a1ds5fja1dsfj5ka1d", "4a1ds5fjkl"],
            "content": 3
        }
    }
}, {
    "location_id": 1,
    "item_id": 24,
    "item_groups": {
        "abc": {
            "stock_name": "abc",
            "exp": "2021-03-29",
            "keys": ["122332", "4324324"],
            "content": 4
        },
        "kbc": {
            "stock_name": "kbc",
            "exp": "2024-03-29",
            "keys": ["6a1ds5fja1dsfj5ka1d", "4a1ds5fjkl"],
            "content": 3
        }
    }
}]

, но я хочу вывод печататься только 1 раз

[{
    "location_id": 1,
    "item_id": 24,
    "item_groups": {
        "abc": {
            "stock_name": "abc",
            "exp": "2021-03-29",
            "keys": ["122332", "4324324"],
            "content": 4
        },
        "kbc": {
            "stock_name": "kbc",
            "exp": "2024-03-29",
            "keys": ["6a1ds5fja1dsfj5ka1d", "4a1ds5fjkl"],
            "content": 3
        }
    }
}]

, потому что когда я выполняю запрос, он возвращает 4 строки, но в этой 4 строке две строки, имеющие одинаковый stock_item, но разные ключи, поэтому я разделил этот json на две части ab c и КБ c. снова в ab c типе stock_name у нас есть два diff-ключа, поэтому я создал массив ключей.

любое решение?

...