레일의 일부 메소드가 !
연산자를 사용하여 유효하지 않은 예외를 발생시키는 것으로 나타났습니다. 예 : User.create!
언제 메소드에서 예외를 발생시킬 것인가?
왜 이런 식으로 사용하고 싶습니까?
감사합니다.
레일의 일부 메소드가 !
연산자를 사용하여 유효하지 않은 예외를 발생시키는 것으로 나타났습니다. 예 : User.create!
언제 메소드에서 예외를 발생시킬 것인가?
왜 이런 식으로 사용하고 싶습니까?
감사합니다.
ActiveRecord will roll back a transaction if an exception is thrown while a transaction is active.
따라서 예외를 throw하는 메서드는 예외적 인 조건이 발생할 때 데이터베이스가 트랜잭션을 커밋하지 않도록 보장합니다. 직접 문제를 "처리"할 수 있거나 실제로 문제가 아닌 경우 !
이없는 변형을 사용할 수 있으며 오류 조건의 반환 값을 확인하고 직접 처리 할 수 있습니다.
User.create
방법을 사용할 수 있습니다 : User.create
같은 특정 뭔가 사용.
User.create!
메서드를 사용하면 사용자가 친숙한 이름 확인을 무시하려고 시도 할 때 무결성 검사가 트랜잭션 생성 및 롤백에 실패 할 수 있습니다.나는 방법이 있지만 여기에 처리 실제 오류를 싶지 않아 성공 있는지 확인 할 수 있습니다 여러 가지 이유로
begin ... rescue ... end
이 더 명확합니다.오류 상태가 수가 적고 통화 직후에 완전히 처리되는 경우 예외를 사용하지 않는 좋은 이유가 있지만 상태 플래그가 있습니다. 그러나 모든 기술에는 그 위치와 시간이 있습니다.
그리고 btw, save
메서드는 내부적으로 save!
을 호출하고 잠재적 예외를 처리하고 있으면 예외를 반환합니다. 구현 방법은 the code을 참조하십시오.
Pedantic nit : '!'는 연산자가 아니며 메서드 이름의 일부입니다. 문제의 API에 따라 때로는 내부 데이터에서 _ 연산을 의미합니다. – sarnold
그것은 정말로 현악기가 아닙니다. '! '는 연산자입니다 만, 메소드 명이'create!'와 같은 경우 연산자는 * 연산자가 아닙니다. –