Active Record 에서 update 요청 한 원자 조작

1148 단어 activerecordruby
Active Record 로 데이터베이스 기록 을 수정 하면 보통 이런 SQL 을 보 냅 니 다.UPDATE 'posts' SET 'posts_count' = 1 WHERE 'id' = 38
이런 걸 보 내 려 면:UPDATE 'posts' SET 'posts_count' = 'posts_count' + 1 WHERE 'id' = 38
increment 를 사용 해 야 합 니 다.counter/decrement_counter 방법:(주의,이 두 가 지 는 모두 클래스 방법 입 니 다.사용 시 대상 ID 를 입력 해 야 합 니 다)Post.increment_counter :posts_count , 38
생 성 된 SQL 은 다음 과 같 습 니 다.UPDATE 'posts' SET 'posts_count' = COALESCE('posts_count', 0) + 1 WHERE ('id'= 38)
이렇게 하면 안전 한 원자 증 량 조작 이다.COALESCE()함 수 는 필드 가 NULL 로 인해 오 류 를 일 으 키 는 것 을 방지 하 는 데 사 용 됩 니 다.하나의 기록 에 여러 필드 를 동시에 조작 하려 면update_counters방법 을 사용 해 야 합 니 다.(같은 방법 입 니 다.ID 는 첫 번 째 매개 변수 로 들 어 갑 니 다)Post.update_counters 38 , :posts_count => 2 , :update_calls_count => 1
생 성 된 SQL 은 다음 과 같 습 니 다.UPDATE 'posts' SET 'posts_count' = COALESCE('posts_count', 0) + 2, 'update_calls_count' = COALESCE('update_calls_count', 0) + 1 WHERE ('id' = 38)

좋은 웹페이지 즐겨찾기