Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails意外地创建了重复记录_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 4 Rails意外地创建了重复记录

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

当“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.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”(表的另一个属性)都是唯一的。由于这个原因,您的解决方案是不可能的。我删除了创建!并改为“创建”。让我们看看它是否与验证重复(我认为“!”跳过了,对吗?)您可以将问题标记为已回答,以免混淆未来的读者:)