1

Railsのキャストエピソード、CSVのインポート、Excelをフォローしていますが、設定が少し異なります。

使用量(金額)と価格(金額)の2つのモデルがあります。私はそれを設定しているので、使用量は1つの価格であり、価格は使用法に属します。私のcsvには、次のように2つの列があります。

usage,price
1000,0.1
1500,0.11

データベースにusage.amountとusage.price.amountを取得できるように、データをインポートしようとしています。

私はここを見て、そこですべてを試しました。注意すべき点の1つは、id列がないことです(id列を試してみましたが、その質問のコードはまだ機能しませんでした)。

これが私のモデルのコードです:

class Usage < ActiveRecord::Base
  has_one :price, dependent: :destroy

  accepts_nested_attributes_for :price


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

注:上記はprice.amountのインポートに言及していないことは知っていますが、試したものはすべて機能しません。

これに関するどんな助けでも大いに感謝されるでしょう、ありがとう!

アップデート

これが私がそれを機能させた方法です:(次のコードを手伝ってくれたalalaniに感謝します。)

CSV.foreach(file.path, headers: true) do |row|
  u = Usage.create(amount: row[0])
  u.create_price(amount: row[1])
end
4

1 に答える 1

2

クラスの新しいインスタンスを作成して手動で追加してみませんか?

だからあなたはすることができます:

def self.import(file)    
    CSV.foreach(file.path, headers: true) do |row|
        u = Usage.new(:amount => row[0])
        u.save
        p = Price.new(:amount => row[1])
        p.save
        u.price << p
    end
end

もう少し手間がかかるようですが、ここで何が起こっているのかを理解するのは非常に簡単です

于 2013-02-18T14:07:44.330 に答える