Target.transaction do wanted = { "salades" => 40, "tomates général" => 40, "développement floral" => 20 } # Ensure all referenced profiles exist profiles = NutrientProfile.where(name: wanted.keys).index_by(&:name) missing = wanted.keys - profiles.keys raise "Missing NutrientProfile(s): #{missing.join(', ')}" if missing.any? target = Target.find_or_create_by!(name: "Objectif par défaut") target.target_allocations.destroy_all wanted.each do |name, pct| target.target_allocations.build(nutrient_profile: profiles[name], percentage: pct) end target.save! end