Carlos Brando

Nome do Jogo

Edge Rails: ActiveRecord::Base#touch

A próxima versão do Rails contará com um novo método chamado touch em todos os objetos do ActiveRecord, o método basicamente serve para atualizar os campos updated_at e updated_on do registro atual com a data e hora corrente. Veja abaixo a implementação do método:

def touch(attribute = nil)
  current_time = current_time_from_proper_timezone

  if attribute
    write_attribute(attribute, current_time)
  else
    write_attribute('updated_at', current_time) if respond_to?(:updated_at)
    write_attribute('updated_on', current_time) if respond_to?(:updated_on)
  end

  save!
end

Como você pode ver na implementação acima ele aceita um parâmetro attribute. Utilizaremos este parâmetro para informar um campo diferente dos mencionados acima quando for necessário.

product.touch # atualiza o campo updated_at
product.touch(:designed_at) # atualiza o campo designed_at

Esta atualização vale tanto para o Rails 3 como para uma futura provável versão do Rails 2.3.

Graças a este novo método também ganhamos um novo atributo para associações belongs_to, fazendo com que ao criar, atualizar ou apagar um registro filho o método touch do registro pai seja executado. Por exemplo, veja o código abaixo:

class Pet < ActiveRecord::Base
  belongs_to :owner, :touch => true
end

A partir do exemplo, quando cadastrarmos ou atualizarmos um animalzinho de estimação (pet), os campos updated_at/on do dono (owner) correspondente serão automaticamente atualizado com a data atual.

Comments