2016-08-31 7 views
0

私のレールアプリケーションにインポート機能を追加しています。私はユーザーテーブルの列が短くて手軽ですが、ユーザーをインポートできるようにしたいと思います。 f_name = firs name l_name =姓など..私は、ユーザーがアプリケーションからダウンロードして最初のユーザーのインポートで時間を節約するために入力できるインポートツールを作成したいと考えています(これは他のモデルでも使用されます)。 。)カスタムヘッダーを読み込むためにインポートメソッドを設定できる方法はありますか?私はこれを検索しようとしましたが、あまり戻ってきていません。多分私はその質問をどのように表現しているのでしょうか?レール用のカスタムヘッダー4 CSVインポート

それはインポート機能が動作している今座っているが、誰が本当にExcelシートを見て嫌な平原を望んでいると...

マイインポートコントローラアクション:

def import 
    User.import(params[:file]) 
    redirect_to users_path, notice: 'Users Added Successfully' 
    end 

インポートクラスの機能:

def self.import(file) 
    CSV.foreach(file.path, headers: true) do |row| 
     User.create! row.to_hash 
    end 
    end 

答えて

1

ヘッダーを自分で置き換える方法を作成できます。ファイルをメモリに読み込み、最初の行を変更します。その後、CSV.foreachを実行します。そして、そのself.parse_headersを参照(ファイル)メソッドself.headers.each - 私は...このエラー「文字列への記号の無い暗黙の型変換」を取得

def self.headers 
    {"last name" => "l_name", 
    "first name" => "f_name"} 
end 
def self.import(file) 
    CSV.parse(self.parse_headers(file), headers: true) do |row| 
     User.create! row.to_hash 
    end 
end 
def self.parse_headers (file) 
    File.open(file) { |f| 
       first_line = f.readline 
       self.headers.each { |k,v| first_line[k] &&= v } 
       first_line + f.read } 
end 
+0

イムこれをインデントするより良い方法があると確信しています{| k、v | first_line [k] && = v}エラー行として –

+0

私は更新しました、変換を修正する必要があります。 –

+0

素晴らしい!助けてくれてありがとう!それはトリックでした! –