One of your problems is that you are only doing the redirect if the save is successful, so if it fails you don't have a Review/add.ctp so it is giving you a missing view error. You need to do the redirect regardless of the save working or not, so that you always get taken back to the products page.
And the reason you won't get the errors on the fields would be because you are doing a redirect, so the errors get lost. You could just pass the errors through to the products controller as another parameter of the action.
ReviewsController
public function add() {
if (!empty($this->request->data)) {
$errors = null;
if (!$this->Review->save($this->request->data)) {
$errors = $this->Review->validationErrors;
}
// Always redirect
$this->redirect(array('controller' => 'products', 'action' => 'view', $this->request->data['Review']['product_id'], 'errors' => $errors, '#' => 'reviews'));
}
}
ProductsController
public function view($product_id, $errors = null) {
if (!empty($errors)) {
$this->Review->validationErrors = $errors;
}
}
Of course I don't know what all of your code looks like, and this is untested, but the idea is to pass the Review model's validation errors to the product controller and then assign them manually back to the Review model again on the products page.