From be9f3608961fc11d972195b34fdd27de1e08c070 Mon Sep 17 00:00:00 2001 From: Zin Bo Thit Date: Thu, 3 Sep 2026 16:31:22 +0630 Subject: [PATCH] Handle JSON string item attributes in foodcourt menu --- .../foodcourt/dashboard/_menu.json.jbuilder | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/app/views/foodcourt/dashboard/_menu.json.jbuilder b/app/views/foodcourt/dashboard/_menu.json.jbuilder index 027561e7..7e9c22cd 100644 --- a/app/views/foodcourt/dashboard/_menu.json.jbuilder +++ b/app/views/foodcourt/dashboard/_menu.json.jbuilder @@ -1,3 +1,19 @@ +normalize_ids = lambda do |value| + case value + when Array + value + when String + begin + parsed = JSON.parse(value) + parsed.is_a?(Array) ? parsed : [] + rescue JSON::ParserError + [] + end + else + [] + end +end + json.id menu.id json.name menu.name json.is_ordering menu.is_ordering @@ -40,16 +56,18 @@ if (menu.menu_categories) # Format for attributes json attr_format = [] # Format for attributes json - if item.item_attributes.count > 0 - item_attributes = item.item_attributes.map(&:to_s) + item_attributes = normalize_ids.call(item.item_attributes) + if item_attributes.count > 0 + item_attributes = item_attributes.map(&:to_s) attr_format = @item_attributes.select { |x| item_attributes.include?(x.id.to_s) }.group_by {|att| att.attribute_type.strip }.map { |type, values| {type: type, values: values.map { |x| x.name.strip } } } end # Format for option json opt_format = [] # Format for attributes json - if item.item_options.count > 0 - item_options = item.item_options.map(&:to_s) + item_options = normalize_ids.call(item.item_options) + if item_options.count > 0 + item_options = item_options.map(&:to_s) opt_format = @item_options.select { |x| item_options.include?(x.id.to_s) }.group_by {|opt| opt.option_type.strip }.map { |type, values| {type: type, values: values.map { |x| x.name.strip } } } end @@ -84,7 +102,7 @@ if (menu.menu_categories) json.instances item.menu_item_instances do |is| if is.is_available # Convert id to name for attributes - item_attributes = is.item_attributes.map(&:to_s) + item_attributes = normalize_ids.call(is.item_attributes).map(&:to_s) instance_attr = @item_attributes.select{ |x| item_attributes.include?(x.id.to_s) }.pluck(:name) json.id is.id