Use antes / depois de chamadas de retorno ao tocar em seus modelos Rails

No Rails, usar “touch” para atualizar timestamps em seus modelos é incrível. Por exemplo, quando você deseja implementar <a href=” http://37signals.com/svn/posts/3113-how-key-based-cache-expiration-works”> expiração de cache baseada em chave </a>.

Assim como atualizar, salvar e criar modelos, você também pode usar callbacks after_ e before_ para toque em seus modelos Rails.

class Product < ActiveRecord::Base

after_touch
:update_cached_stock

def combined_stock
# Fetch some stock from various places that you can't
# do in a simple SQL query.

return my_combined_stock
end

private

def update_cached_stock
update_attribute
(:cached_stock, self.combined_stock)
end
end

Em um aplicativo que estamos desenvolvendo, existem várias coisas e modelos relacionados que podem influenciar o estoque de um produto. (Importamos de um banco de dados SAP, mas também processamos pedidos pela web e geramos faturas).

Fazer algo como @ product.touch em um trabalho em segundo plano que atualiza automaticamente o estoque para que possamos fazer Product.order (: cached_stock) .paginate em um controlador é incrível dessa forma.