2015-02-08 4 views
0

Мне нужно создать новый рынок «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 

ответ

0

Если вы не знает точную ситуацию, но, возможно, вы могли бы добавить ограничение уникальности на имя и event_id полой пару? Например, в миграции можно было бы написать:

add_index :markets, [:event_id, :name], :unique => true 

В этом случае вы будете уверены в том, что есть только один markets запись с нужной name значения.

+0

«Проблема» в том, что названия рынков не уникальны. Они уникальны для каждого «event_id» (еще один атрибут таблицы). По этой причине ваше решение невозможно. Я удалил создание! и вместо этого разместил «создать». Давайте посмотрим, не дублируется ли она с проверкой (я думаю, что «!» Пропустит это правильно?) – ace

+0

, который должен исправить! спасибо – ace

+0

Вы можете отметить вопрос как ответ, чтобы не путать будущих читателей :) –

Смежные вопросы