Не должно ли быть:
var $validate= array('product_id'=> array('rule'=>'numeric',
'on'=>'create',
//etc
В противном случае вы пытаетесь проверить поле с именем numeric
?
Кроме того, хотя я не знаю, как функционирует ваше приложение, использование product_id
звучит так, как будто оно должно относиться к другой записи в таблице products
, которая будет автоматически обрабатываться с Cake, то есть при выборе.
Если вы вводите уникальный код (например, внутренний ссылочный номер), попробуйте переименовать поле во что-то менее похожее на Cake, чтобы избежать любых проблем, которые могут возникнуть, или путаницы с другим разработчиком Cake.