Я не уверен, как Ruby использует ActiveRecord для сохранения данных непосредственно в коде модели.Как сохранить данные в БД в самой модели?В основном мой код сталкивается с условием гонки по следующей причине (Ruby / rails + ActiveRecord + Sidekiq): - Моя модель выполняет что-то вроде следующего:
def is_present?(data)
memory['properties'].include?(data)
def update_mem(data, size)
if size != 0 && memory['properties'].length == amount
memory['properties'].shift
memory['properties'].push(data)
Он проверяет наличие определенного значения (is_present)), если он еще не присутствует в памяти ['properties'], он добавит его.
- Ясно, что если только один поток обращается к "памяти", он работает просто отлично, но с Sidekiqдовольно быстро, может быть несколько запущенных потоков и в конечном итоге окажется в состоянии гонки (один поток что-то записывает, другой поток читает то, что было в памяти раньше).
«память» на самом деле является столбцомв таблицу (MySQL) и как только я напишу что-нибудь в ней с помощью «memory ['properties']. push (123)", я хотел бы сохранить их немедленно.
У меня вопрос, как мне это сделать?предотвратить это странное состояние гонки?Что я хотел бы сделать, это сохранить данные непосредственно в БД с использованием модели.Проблема в том, что он, кажется, не работает.
Итак, для доступа к данным в модели я использую следующий код: memory ['property']. Push (123) или self.memory ['property'] .push (123)
Они оба ссылаются на столбец памяти в таблице БД.
Но тогда я хочу сделать что-то вроде self.save!но он вообще не работает.
Я попытался добавить следующий код в саму модель:
self.memory_will_change!
self.memory['properties'].push(property)
self.save!
К сожалению, он не работает, и я не могу сохранить данные в БД.
Эта модель на самом деле вызывается через execute () с использованием Sidekiq, как показано ниже:
model = Receivers.find(id)
model.receive(data)
model.time = Time.now
model.save!
Таким образом, время обновляется правильно, но память (которая обновляется в модели при вызове"получить") не обновляется.Кто-нибудь знает, как преодолеть эту проблему?Мне нужно сохранить данные в БД непосредственно в модели.
Спасибо, и я с нетерпением жду вашего ответа.