Eu tenho um modelo ActiveRecord que está retornando true
de valid?
(e .errors está vazio), mas está retornando false
de save()
. Se a instância do modelo for válida, como posso descobrir o que está causando a falha no salvamento?
Eu tenho um modelo ActiveRecord que está retornando true
de valid?
(e .errors está vazio), mas está retornando false
de save()
. Se a instância do modelo for válida, como posso descobrir o que está causando a falha no salvamento?
Respostas:
Verifique todas as suas chamadas de retorno.
Eu tive um problema como este onde eu tinha um método "after_validate" que estava falhando depois que eu fiz várias alterações no modelo. O modelo era válido, mas o "after_validate" estava retornando falso, então se eu o usei model.valid
disse verdadeiro, mas se eu salvei, ele me deu erros de validação (passado pelo callback after_validate). Foi estranho.
Observe o rastreamento do aplicativo e você poderá ver qual linha de código está gerando a exceção.
"Hey! That's MY fake leg!" # Believe it or not, this is important
. Não que eu fosse fazer isso. ;)
true.tap { do_something }
Tente usar a versão bang save!
(com um ponto de exclamação no final) e inspecione o erro resultante.
save!
pode aumentar ActiveRecord::RecordInvalid
(já que executa validações) ou ActiveRecord::RecordNotSaved
então é isso que você deseja resgatar.
.save
falhas que não são devidas à validação. A qualificação "menos insatisfatória" refere-se ao Rails, não a esta resposta.
Se @user.save
(por exemplo) retornar false
, execute-o para obter todos os erros:
@user.errors.full_messages
Sim, eu corrigi esse problema certificando-me de retornar true em todos os meus before_ * callbacks e começar a funcionar :)
O problema que tive foi que me esqueci de adicionar a validação ao modelo.
class ContactGroup < ActiveRecord::Base
validates_presence_of :name
end