Você poderia explicar em detalhes o que o :before_save
e :before_create
Ruby on Rails retornos de chamada são, eo que eles têm a ver com Rails validações? A validação ocorre após :before_save
ou :before_create
?
Você poderia explicar em detalhes o que o :before_save
e :before_create
Ruby on Rails retornos de chamada são, eo que eles têm a ver com Rails validações? A validação ocorre após :before_save
ou :before_create
?
Respostas:
Em uma operação de criação no Rails, há seis retornos de chamada antes da operação do banco de dados e dois depois. Em ordem, são eles:
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
As operações de atualização têm exatamente o mesmo conjunto, exceto a leitura em update
vez de em create
qualquer lugar (e UPDATE em vez de INSERT ).
A partir disso, é possível ver que a validação é realizada antes dos retornos de chamada before_save
e before_create
.
O before_save
ocorre um pouco antes do before_create
. Que eu saiba, nada acontece entre eles; mas before_save
também será acionado nas operações de atualização, enquanto before_create
será acionado apenas no Cria.
after_save
ou after_create
?
after_save
ou after_create
, self
é o registro que acabou de ser salvo, pois existe após o salvamento. Que os campos inclui Autogenerated gosto id
, created_at
, updated_at
.
before_create
se também de que um novo objeto está sendo salvo no banco de dados, e não o create
método real que está sendo chamado. Assim, before_create
ainda pode ser acionado, mesmo a partir do save
método.
before_save
3 e before_create
5.
before_save
é chamado toda vez que um objeto é salvo. Assim, para objetos novos e existentes. (criar e atualizar ação)
before_create
somente antes da criação. Portanto, apenas para novos objetos (criar ação)
before_create
vs before_save :on => :create
Às vezes, você precisa ter cuidado com a ordem dos retornos de chamada
Consulte aqui para obter mais detalhes:
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create
não funciona (pelo menos nos trilhos 3.2)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create
eafter_validation_on_create
são removidos a partir de trilhos 3 , em vez disso usarbefore_validation
eafter_validation
, respectivamente, com a opção:on => :create
.