Я создал метод индекса, в котором я использую
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-ключа, поэтому я создал массив ключей.
любое решение?