2017-03-27 9 views
0

mongoidを使用してデータベースを作成しようとしていますが、作成方法を見つけることができません。csvからデータベースを作成した後の不良チャート

extract_dataクラス:

class ExtractData 

    include Mongoid::Document 
    include Mongoid::Timestamps 

    def self.create_all_databases 
    @cbsa2msa = DbForCsv.import!('./share/private/csv/cbsa_to_msa.csv') 
    @zip2cbsa = DbForCsv.import!('./share/private/csv/zip_to_cbsa.csv') 
    end 

    def self.show_all_database 
    ap @cbsa2msa.all.to_a 
    ap @zip2cbsa.all.to_a 
    end 

end 

DbForCSVは、以下のように動作しますクラス:

class DbForCsv 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Attributes::Dynamic 

    def self.import!(file_path) 
    columns = [] 
    instances = [] 
    CSV.foreach(file_path, encoding: 'iso-8859-1:UTF-8') do |row| 
     if columns.empty? 
     # We dont want attributes with whitespaces 
     columns = row.collect { |c| c.downcase.gsub(' ', '_') } 
     next 
     end 
     instances << create!(build_attributes(row, columns)) 
    end 
    instances 
    end 

    private 

    def self.build_attributes(row, columns) 
    attrs = {} 
    columns.each_with_index do |column, index| 
     attrs[column] = row[index] 
    end 
    ap attrs 
    attrs 
    end 
end 

私はすべてのフィールドを認識していないですし、それがかもしれない私は、CSVファイルに基づいて2つのデータベースを作成しようとしています時間の変化。そのため私はデータベースとジェネリックのmehtodを作成しています。

「作成!」を修正した後に別の問題があります。問題。

は私が扱われていることを確認だけUTF8の文字を作るためのエンコードを使用していますが、私はまだ参照してください。

{ 
     "zip" => "71964", 
     "cbsa" => "31680", 
    "res_ratio" => "0.086511098", 
    "bus_ratio" => "0.012048193", 
    "oth_ratio" => "0.000000000", 
    "tot_ratio" => "0.082435345" 
} 

コードで「APのattrsに」をやって。必ず「私»¿ジップ」ことを確認する方法 - > 『のzip』

おかげ

答えて

1

create!クラスメソッドですが、インスタンスメソッドとしてそれを呼び出すようにしようとしています。あなたのimport!方法は、それはあなたのクラスのインスタンスを生成するので、それはクラスメソッドである必要があり、どちらかのインスタンスメソッドではありません。

def self.import!(file_path) 
    #-^^^^ 
    # everything else would be the same... 
end 

それがためだけのヘルパーメソッドですので、あなたはまた、build_attributesクラスメソッドを作ると思います別のクラスのメソッド:

def self.build_attributes 
    #... 
end 

そしてimport!を使用しているとき、あなたはその奇妙探しnewコールは必要ありません。

def self.create_all_databases 
    @cbsa2msa = DbForCsv.import!('./share/private/csv/cbsa_to_msa.csv') 
    @zip2cbsa = DbForCsv.import!('./share/private/csv/zip_to_cbsa.csv') 
end 
関連する問題