Как организована система оповещений а-ля Вконтакте?
Скорее паттерн Publish-subscribe. Фронт-энд подписывается на какой-то тип сообщений на каком-то канале (например, new-message, new-friendship-request, new-gift на канале user-ID) и выполняет какие-то действия с данными этих сообщений (обновляет счетчик непрочитанных сообщение, делает новое уведомление через Web Notifications API, что угодно). А сервер, помимо записи данных в базу, отправляет новое сообщение какого-то типа на конкретный канал.

Т.е. кто-то отправил новое сообщение. Сервер пишет его в базу и пушит на клиент:

message = Message.create params[:message]
Pusher["user-#{message.receiver.id}"].trigger('new-message', message)


Клиент просто слушает и что-то делает с данными:

var channel = pusher.subscribe('user-500fbf726446c604d2000001');
channel.bind('new-message', function(data) {
  alert('Received new message from ' + data.sender.name + ': ' + data.text)
});


Посмотрите в сторону Web Sockets — socket.io/faye (если хочется у себя держать) или pusher (если хочется все это просто делать через сервис).
возможно вам поможет паттерн наблюдатель (observer), попробуйте посмотреть в эту сторону.