Smart action to create several records from the input of a single smart action form

Please be sure of your agent type and version and pick the right documentation accordingly.

This is the documentation of the forest-express-sequelize and forest-express-mongoose Node.js agents that will soon reach end-of-support.

forest-express-sequelize v9 and forest-express-mongoose v9 are replaced by @forestadmin/agent v1.

Please check your agent type and version and read on or switch to the right documentation.

Smart action to create several records from the input of a single smart action form

Description: From a smart action form which asks input for 3 new products at a time (picture + description), catch the posted payload and create 3 products

require 'data_uri'
require 'base64'

class Forest::ProductsController < ForestLiana::ApplicationController

  def split_product
    attrs = params.dig('data', 'attributes', 'values')
    created_items = 0

    (1..3).each do |i|
      new_product_picture = attrs["product_#{i}_picture"];
      new_product_description = attrs["product_#{i}_description"];
      if new_product_picture && new_product_description
        # if you are storing your pictures in a cloud and your DB stores the pictures url -> include here a function to send the base64 image to your cloud and fetch back the corresponding url
        Product.new({
          label: product_description,
          picture: product_picture,
        })
        created_items += 1 if Product.save
      end
    end

    success_message = 'Successfully created ' + created_items.to_s + ' item(s)'
    puts success_message
    render json: { success: success_message }

  end

  def split_product_values
    context = get_smart_action_context
    picture_url = context[:picture]

    render serializer: nil, json: { product_1_picture: picture_url, product_2_picture: picture_url, product_3_picture: picture_url}, status: :ok
  end

end

Last updated