Eu tenho um modelo ActiveRecord que está retornando truede valid?(e .errors está vazio), mas está retornando falsede 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 truede valid?(e .errors está vazio), mas está retornando falsede 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.validdisse 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::RecordNotSavedentão é isso que você deseja resgatar.
.savefalhas 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