Абсолютно, держите эту логику вне контроллера. Контролеры должны передавать бизнес-решения моделям. Это весь смысл наличия MVC фреймворка для начала.
Кроме того, я бы поставил логику в SalesOrder, а не в Product - это выглядит как хороший кандидат для named_scope. Может быть, что-то вроде этого (и, имея в виду, я не знаю, каково ваше конкретное правило для расчета даты доставки заказа):
named_scope :deliverable, lambda {{ :conditions => ["date < ?", Date.today] }}
Обтекание лямбдой гарантирует, что: условия будут оцениваться в режиме реального времени, используя текущее значение даты. Очевидно, что условия зависят от того, какое правило вашего бизнеса применяется для доставляемых заказов, но вы поняли идею. Это позволило бы создать хорошую цепочку методов, например:
pa.sales_orders.deliverable
Теперь вы можете повторно использовать эту логику везде, где есть has_many: sales_orders.