For the meatballs, mix the beef mince, beaten egg and chopped onion together in a large bowl, using your hands, until well combined.
With wet hands, roll the mixture into walnut-sized balls.
Heat the oil in a frying pan over a medium heat. Add the meatballs in batches and fry for 4-5 minutes turning regularly, or until golden-brown all over and completely cooked through. Remove from the pan using a slotted spoon and set aside to drain on kitchen paper.
For the spicy tomato sauce, heat the oil in a large pan over a low to medium heat. Add the onion and garlic and fry for 6-8 minutes, or until softened but not coloured.
Add the cumin seeds, black peppercorns, cloves, cinnamon stick, bay leaf and cardamom pods and continue to fry for 3-4 minutes, or until the spices are fragrant.
Add the garam masala, chilli powder and ground turmeric and fry for a further 2-3 minutes, or until fragrant.
Add the canned tomatoes and bring the mixture to a simmer. Simmer for 18-20 minutes, or until the mixture has thickened.
Stir the meatballs into the spicy tomato sauce until coated and continue to simmer for 4-5 minutes, or until warmed through.
To serve, spoon the rice into the centre of four serving plates. Spoon the meatballs and spicy tomato sauce on top.