7trkhg
Last Updated: February 25, 2016
·
7.643K
· michiels
Fb613ae74d247c05eba250f575e2c9b0

Use before/after callbacks when touch-ing your Rails models

In Rails, using "touch" to update timestamps on your models is awesome. For example when you want to implement <a href="http://37signals.com/svn/posts/3113-how-key-based-cache-expiration-works">key-based cache expiration</a>.

Just like updating, saving and creating models you can also use after_ and before_ callbacks for touch on your Rails models.

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

In an application we are developing, there are various things and related models that could influence a product's stock. (We import from a SAP database, but also process web orders and generate invoices).

Doing something like @product.touch in a background job which automatically updates stock so we can do Product.order(:cached_stock).paginate in a controller is awesome this way.

Say Thanks
Respond

1 Response
Add your response

11019
11f3d4293e09dceb2362f323fe8b8cdf

before_touch does not exist (at least in Rails 4), only after_touch

over 1 year ago ·