Ruby on rails 4 Rails意外地创建了重复记录
当“0.5”关闭时,我需要创建一个新市场“3.5”。问题是,出于某种原因,很多次,而且只有在实时服务器上,它创建了重复的“3.5”,正好在关闭0.5和打开前3.5的同时。有没有办法防止创建重复记录?大多数情况下,它只创建一个记录,但由于某些原因,我不明白,有时它会搞砸 下面是问题代码的一部分:Ruby on rails 4 Rails意外地创建了重复记录,ruby-on-rails-4,Ruby On Rails 4,当“0.5”关闭时,我需要创建一个新市场“3.5”。问题是,出于某种原因,很多次,而且只有在实时服务器上,它创建了重复的“3.5”,正好在关闭0.5和打开前3.5的同时。有没有办法防止创建重复记录?大多数情况下,它只创建一个记录,但由于某些原因,我不明白,有时它会搞砸 下面是问题代码的一部分: ######CLOSE 0.5 / OPENS 3.5 if self.markets.find_by_name('0.5') != nil then if result.su
######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
我不知道你的具体情况,但也许你可以添加唯一的约束 关于名称和事件id字段对?例如,在迁移过程中,您可以编写:
add_index :markets, [:event_id, :name], :unique => true
通过这种方式,您将确保只有一条
市场
记录具有所需的名称
值。问题在于市场名称不是唯一的。它们对于每个“event_id”(表的另一个属性)都是唯一的。由于这个原因,您的解决方案是不可能的。我删除了创建!并改为“创建”。让我们看看它是否与验证重复(我认为“!”跳过了,对吗?)您可以将问题标记为已回答,以免混淆未来的读者:)