2016-11-09 1 views
0

私はCSV経由で人物の詳細をエントリとしてインポートすることができます。CSVでインポートして同時にフィールドを設定する

スプレッドシートにその行にIDが含まれていない場合はエントリが作成され、それ以外の場合はID番号に従ってエントリが更新されます。

最終的には、IDがない場合はエントリをインポートするときに 'CreatedAt'フィールドを更新し、それ以外の場合は一度だけ残しておきます(各エントリは 'CreatedAt'を一度設定する必要があります)。

すでに「CreatedAt」セットがあり、更新するだけの場合は何もしないでください。

これは私がこれまで持っているコードです:

コントローラファイル:

def import 
Votsphonebook.import(params[:file]) 
redirect_to root_url, notice: "Entries updated!" 
end 

モデルファイル:

def self.import(file) 
    CSV.foreach(file.path, headers: true) do |row| 

     votsphonebook_hash = row.to_hash 
     votsphonebook = Votsphonebook.where(id: votsphonebook_hash["id"]) 

     if votsphonebook.count == 1 
      votsphonebook.first.update_attributes(votsphonebook_hash) 
     else 

      Votsphonebook.create!(votsphonebook_hash) 
     end 
    end 
end 

私はちょうど私のコードのエントリ・ポイントを必要とします現在の行を調べてif文を実行することができます。

updated_atcreated_at列が自動的にアクティブレコードによって移入され、あなたに

答えて

1

ありがとうございます。必要なものを達成するために必要な追加手順はありません。

あなたはこれを行うことができますカスタム列に現在の時刻をキャプチャしたい場合:

def self.import(file) 
    CSV.foreach(file.path, headers: true) do |row| 
    votsphonebook_hash = row.to_hash 
    votsphonebook = Votsphonebook.find(votsphonebook_hash["id"]) 

    if votsphonebook 
     votsphonebook.update_attributes(votsphonebook_hash.merge(your_custom_column: Time.now)) 
    else 
     Votsphonebook.create!(votsphonebook_hash) 
    end 
    end 
end 

私はあなたのファインダー明確にするために少しをリファクタリングしますのでご注意ください。

+0

更新されるetryごとにカスタム列を更新することはできますか?たとえば、私は毎回 't'に設定したい「承認済み」の列を持っていますか? – jimps

+0

'created_at'はレコードが作成されると一度だけ設定され、' updated_at'はレコードが変更されるたびに設定されます。 – rebagliatte

+0

ありがとうございますが、created_atとupdated_atを忘れてしまったカスタムカラムについてはどうですか? – jimps