2013-12-12 25 views
7

Mam pewien kod w pliku źródłowym, który chciałbym zmienić, aby nie tworzył duplikatów rekordów, gdy wielokrotnie uruchamiam polecenie seed. Jakikolwiek sposób dostosować poniższy kod z pliku zarodków, aby było to możliwe? Metoda find_or_create_by nie działa tutaj, chyba że się mylę.Uruchomić prowizję db: wysiewać wiele razy bez tworzenia duplikatów?

data_file = Rails.root.join('db/data/data.csv') 

CSV.foreach(data_file) do |row| 
    TownHealthRecord.create(
    city: row[0], 
    state: row[1], 
    country: row[2], 
    zip_code: row[3], 
    area_code: row[4] 
    ) 
end 
+0

dlaczego nie sądzisz, że "find_or_create_by"? – sevenseacat

Odpowiedz

6

Użyj sprawdzania poprawności. Jeśli nie chcesz duplikować rekordów, sprawdź jednoznaczność jednego lub więcej pól. W Tobie town_health_record.rb

class TownHealthRecord 
    validates_uniqueness_of :city 
    validates uniqueness_of :health, scope: :person # If you wanted to validate a combination of fields 
end 

Na dodatkowy boczny nie .create! podniesie błędów. .create nie będzie. To samo dotyczy save! i .update_attributes!.