1

У меня есть столбец в моей таблице mysql, называемый download_count типа int.rails update_all поля и счетчик прироста на 1

Теперь я хочу использовать update_all, чтобы обновить некоторые поля с некоторыми значениями, но также увеличивать значение параметра download_count вместе с ним.

Я пробовал следующий синтаксис:

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

Но я считаю, вышеуказанные действия, как, где положение. Таким образом, 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

Попробуйте

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

Второй аргумент update_all является условием.

+0

Проблема только в том, что это будет _by pass_ _validations_ и _callbacks_. –

+1

Спасибо Vimsha, так как он обойдет проверки и обратные вызовы, которые я выбрал для использования find_each, как было предложено Arup – newbie