2013-12-12 10 views
7

シードファイルにコードをいくつか入れて、シードコマンドを複数回実行したときに重複レコードが作成されないように変更したいと思います。これが可能になるように、私のシードファイルから以下のコードを変更する方法はありますか? find_or_create_byメソッドは、私が間違っていない限り、ここで動作するようには見えません。重複レコードを作成せずにrake db:seedを複数回実行しますか?

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

なぜ「find_or_create_by」はここではうまくいかないと思いますか? – sevenseacat

答えて

6

検証を使用してください。レコードが重複しないようにするには、1つまたは複数のフィールドの一意性を検証します。追加側では、あなた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 

ではない、.create!はエラーを発生させます。 .createは表示されません。 save!.update_attributes!についても同じです。