Мне нужно создать новый рынок «3.5», когда «0.5» закрыт. Проблема по какой-то причине много раз, и только на живом сервере она создала дублированный «3,5», точно в то же время, когда он закрыл 0.5 и открыл первый 3.5. Есть ли способ предотвратить создание дублированных записей? В большинстве случаев он создает отдельные записи, но по какой-то причине я не могу понять, иногда это испортится.Rails неожиданно создает дублированные записи
Вот часть проблемного кода:
######CLOSE 0.5/OPENS 3.5
if self.markets.find_by_name('0.5') != nil then
if result.sum >= 1 && (self.markets.find_by_name('0.5').status == "live" || self.markets.find_by_name('0.5').status == "pre-live")
if self.markets.find_by_name('0.5').settle_temp.to_i == 6
selection = "Over 0.5 Goals"
if self.markets.find_by_name('0.5').status == "live" || self.markets.find_by_name('0.5').status == "pre-live"
self.markets.find_by_name('0.5').close(selection)
end
if self.markets.find_by_name('3.5') == nil then
self.markets.create!(name: "3.5", status: "live")
end
else
self.markets.find_by_name('0.5').increment!(:settle_temp)
end
end
end
«Проблема» в том, что названия рынков не уникальны. Они уникальны для каждого «event_id» (еще один атрибут таблицы). По этой причине ваше решение невозможно. Я удалил создание! и вместо этого разместил «создать». Давайте посмотрим, не дублируется ли она с проверкой (я думаю, что «!» Пропустит это правильно?) – ace
, который должен исправить! спасибо – ace
Вы можете отметить вопрос как ответ, чтобы не путать будущих читателей :) –