create_or_find_by와 같은 메서드는 레코드를 생성하거나 찾은 후 즉시 저장하기 때문에, 이후 record.new_record?를 호출하면 레코드가 이미 저장된 상태이므로 항상 false를 반환하게 됩니다. 이는 레코드가 실제로 새로 생성되었는지 여부를 판단하려는 개발자에게 혼란을 줄 수 있습니다.
previously_new_record?의 등장
이러한 한계를 극복하기 위해 Rails 6.1 버전부터 previously_new_record? 메서드가 도입되었습니다. 이 메서드는 이름에서 알 수 있듯이, 레코드가 *마지막 저장 직전에
* 새로운 레코드였는지 여부를 알려줍니다. 즉, 레코드가 데이터베이스에 커밋되기 전의 상태를 기억하여, 저장된 이후에도 해당 레코드가 이전에 새로운 상태였음을 확인할 수 있게 해줍니다.
주요 활용 사례
previously_new_record?는 다음과 같은 다양한 시나리오에서 매우 유용하게 활용될 수 있습니다:
-
온보딩 로직 트리거: 신규 사용자가 생성되었을 때만 특정 온보딩 프로세스를 시작해야 하는 경우.
-
메타데이터 로깅: 레코드의 생성 시점과 관련된 특정 로그를 남겨야 하는 경우.
-
기본값 설정: 새로 생성된 레코드에만 특정 기본값을 설정하거나 초기화 작업을 수행해야 하는 경우.
사용 예시
다음은 previously_new_record?의 실제 사용 예시입니다:
ruby
user = User.create_or_find_by(email: params[:email])
# 사용자가 방금 생성된 경우에만 로그를 생성합니다.
if user.previously_new_record?
create_log(user)
end
이 코드를 통해 user 객체가 create_or_find_by 메서드에 의해 새로 생성되었을 때만 create_log 메서드가 호출되도록 할 수 있습니다. previously_new_record?는 ActiveRecord의 일부로 제공되므로, 별도의 추가 설정 없이 바로 사용할 수 있습니다.