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?
91
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.
fonte
"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.fonte
save!
pode aumentarActiveRecord::RecordInvalid
(já que executa validações) ouActiveRecord::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) retornarfalse
, execute-o para obter todos os erros:fonte
Sim, eu corrigi esse problema certificando-me de retornar true em todos os meus before_ * callbacks e começar a funcionar :)
fonte
O problema que tive foi que me esqueci de adicionar a validação ao modelo.
fonte