1. Про семантику. Не возраст обладает продуктами, а:
* Продукт может предназначаться для такого-то возраста
* Для такого-то возраста имеются такие-то продукты
2. Целесообразность использования отдельной модели Age. Вам точно нужна отдельная таблица?
* Можно завести отдельное поле в табличные projects типа string.
* Можно завести поле типа json\hstore для разнообразных подобных справочников. Может пригодиться
https://github.com/jalkoby/active_store_accessor
Выборка по подобным полям так же возможна:
scope :for_age, ->(age){ where(%q{"hstore_field"->'age' = '?'}, age) }
3. Если все же хотите использовать модель для age, то удобно делать так:
class Product
belongs_to :product_age, class_name: Age.name
delegate :age, to: :product_age
end