1

내 mysql 테이블에 int 타입의 download_count라는 컬럼이 있습니다.레일스 update_all 필드와 증분 카운트를 1로

이제 update_all을 사용하여 일부 값으로 일부 필드를 업데이트하고 함께 download_count를 증가 시키려고합니다.

나는 다음과 같은 구문 시도 :

find_record.update_all(username: username, download_date: download_date, "download_count= download_count + 1") 

을하지만 where 절처럼 위의 행위를 믿습니다. 따라서 download_count가 업데이트되지 않습니다. 사용자 이름, download_date 및 download_count가 위의 쿼리로 업데이트되도록합니다.

누군가 올바른 구문을 가르쳐 줄 수 있습니까?

+0

여기는 SQL 'TRIGGER' 문을 사용해야하는 곳입니다. 예 : http://stackoverflow.com/questions/10113808/mysql-trigger-to-update-count-after-insert – blelump

답변

1

은 유효성 확인과 콜백을으로 전달하지 않습니다.

User.find_each do |u| 
    u.update_attributes(
         username: username, 
         download_date: download_date, 
         download_count: u.download_count + 1 
        ) 
end 

효율적으로 이유를 알고이 find_each 방법의 설명서를 참조하십시오. 나는 User의 이름으로 모델 이름을 취했다.; 당신은 당신의 것을 사용합니다.

2

update_all

find_record.update_all(["username=?, download_date=?, download_count=download_count+1", username, download_date]) 

두 번째 인수를 시도하는 것은 조건이다.

+0

유일한 문제는 _validations_ 및 _callbacks_를 전달합니다. –

+1

Vimsha에게 감사의 말을 전합니다. Arup이 제안한대로 find_each를 사용하기로 선택한 유효성 검사 및 콜백을 무시할 것이기 때문입니다. – newbie

관련 문제