Ruby on Rails e o novo método touch
Recentemente foi adicionado ao Rails o método touch, disponível tanto no Rails 2.3 quanto no Edge (em direção ao 3.0). O touch atualiza o campo updated_at/updated_on do model e então salva o registro. Ele também permite a passagem de um parâmetro, que identifica outro campo data/hora para ser atualizado no lugar de updated_at/updated_on. Touch quer dizer exatamente isto: tocar o registro, ou atualizar um determinado campo com a data/hora atual.
Utilizando o método:
class Project < ActiveRecord::Base validates_presence_of :name end # No console project = Project.create(:name => 'Meu primeiro projeto') #<Project id: 1, name: "Meu primeiro projeto", # created_at: "2009-04-21 05:35:22", updated_at: "2009-04-21 05:35:22"> # Atualizando o campo updated_at no momento que for necessário project.touch # true project #<Project id: 1, name: "Meu primeiro projeto", # created_at: "2009-04-21 05:35:22", updated_at: "2009-04-21 05:40:49">
Preste atenção ao campo updated_at e verifique que ele foi atualizado com sucesso. Podemos também passar o campo que desejamos “tocar”:
project.touch(:created_at) # true project #<Project id: 1, name: "Meu primeiro projeto", # created_at: "2009-04-21 05:42:31", updated_at: "2009-04-21 05:42:31">
Veja que agora foi o campo created_at que foi atualizado (nesse caso o updated_at também foi atualizado por ser uma funcionalidade interna do Rails).
Agora vem o mais interessante: essa funcionalidade foi também adicionada a associação belongs_to, onde é possível passar a opção :touch => true para atualizar o campo updated_at/updated_on do model master automaticamente, ou então passar um símbolo, como :touch => :campo_a_atualizar, para “tocar” este campo específico ao invés do padrão.
Vejamos como fica:
class Project < ActiveRecord::Base has_many :tasks validates_presence_of :name end class Task < ActiveRecord::Base belongs_to :project, :touch => true end # No console project = Project.first #<Project id: 1, name: "Meu primeiro projeto", # created_at: "2009-04-21 05:42:31", updated_at: "2009-04-21 05:42:31"> # Checagem de sanidade project.updated_at # Tue, 21 Apr 2009 05:42:31 UTC +00:00 # Criando uma tarefa project.tasks.create(:name => 'Primeira tarefa') #<Task id: 1, name: "Primeira tarefa", project_id: 1, # created_at: "2009-04-21 05:49:41", updated_at: "2009-04-21 05:49:41"> project.reload.updated_at # Tue, 21 Apr 2009 05:49:41 UTC +00:00
Novamente atenção ao campo updated_at do model Project: atualizado =).
É isso, uma mudança simples que facilita bastante o dia-a-dia.
Lembrando que para testar os método touch é necessário ter a última versão do rails 2.3 disponível no git.



Isso eh bom, eu tinha uns before_save nervoso pra fazer o segundo exemplo ae.. haha..
nofxx
Abril 22, 2009 em 3:06 am
[...] versão 2.3.2, além de algumas pequenas features novas, como o método touch que já mencionei aqui [...]
Liberado o Rails 2.3.3 « Pequenas idéias, grandes soluções.
Julho 20, 2009 em 9:37 pm