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
?
fonte
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
?
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.
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
.after_save
ouafter_create
?after_save
ouafter_create
,self
é o registro que acabou de ser salvo, pois existe após o salvamento. Que os campos inclui Autogenerated gostoid
,created_at
,updated_at
.before_create
se também de que um novo objeto está sendo salvo no banco de dados, e não ocreate
método real que está sendo chamado. Assim,before_create
ainda pode ser acionado, mesmo a partir dosave
método.before_save
3 ebefore_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)fonte
before_create
vsbefore_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/fonte
before_save :on => :create
não funciona (pelo menos nos trilhos 3.2)before_save :generate_api_key, :if => :new_record?