Как пропустить ВСЕ обратные вызовы при создании / обновлении ActiveRecord в рельсах - PullRequest
1 голос
/ 25 мая 2019

Мне нужен простой способ пропустить проверки и обратные вызовы при обновлении активной записи.

Я использую следующий код:

Student.find_or_create_by(id: data['id']).update(data)

, где data - это хэш, имеющий ключи, аналогичные столбцам в студентах. Работает как положено. Но я хочу избежать всех обратных вызовов и проверок при обновлении. Как упоминалось в некоторых ответах на переполнение стека, я попытался:

Student.find_or_create_by(id: data['id']).send(:update_without_callbacks, data)

Это не работает, говорит неопределенный метод update_without_callbacks.

Нет ли в Rails простого, простого метода, такого как update_by_skipping_callbacks или update(skip_callbacks: true, data)?

Ответы [ 2 ]

1 голос
/ 25 мая 2019

https://guides.rubyonrails.org/active_record_callbacks.html#skipping-callbacks

вы можете попробовать update_columns метод

https://apidock.com/rails/ActiveRecord/Persistence/update_columns

Просто имейте в виду, что это идет прямо к базе данных, поэтому updated_atстолбец не обновляется, если вы не обновите его явно

0 голосов
/ 26 мая 2019

Попробуйте

Student.find_or_create_by(id: data['id']).assign_attributes(data).save(validate: false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...