2017-10-03 11 views
1

私は、データベースにシードしてカートに割り当てることを試みているデータの束を持つファイルを持っています。私は先に進んでカートを作ったので、単なるカートにすべてを割り当てたいだけです。問題は、実際にcart_idを置くべき場所を特定しようとしていることです。種子は次のようになります。Ruby on Railsで既存のIDをシードファイルに割り当てる方法は?

require 'csv' 

csv_text = File.read(Rails.root.join('lib', 'seeds', 'IronGloryInventory.csv')) 
csv = CSV.parse(csv_text, :headers => true, :encoding => 'ISO-8859-1') 
csv.each do |row| 
@product = row.to_hash 
t = Product.new 
t.product_name = row['Product'] 
t.sku = row['SKU'] 
t.price = row['Price'] 
t.year = row['Year'] 
t.quantity = row['Available'].gsub(/\:|\D/, '') 
t.size = row['Available'].gsub(/\:|\d/, '') 
t.category = row['Category'] 
t.description = row['Description'] 
t.save 
puts "#{t.product_name}, #{t.year}, #{t.size}, #{t.category} " 
end 

私は、T = Product.new下= 1 t.cart_id入れて試してみたと私はNoMethodErrorを取得します。

私はそれをcsv.eachの上に置いてみましたが、product.cart_id = 1で行い、未定義のローカル変数を取得しました。

実際にはIDを割り当てる反復処理が必要なように感じますが、わかりません。

カートにはhas_manyの商品との関連があり、商品にはbelongs_toがあります。どんな方向にも役立ちます。

+0

ご使用の製品モデルにcart_id属性がありますか?スキーマファイルを追加できますか? –

+0

create_table "カート"、力::カスケードdo | t | t.boolean "購入" t.datetime "のcreated_at"、ヌル:偽 t.datetime "updated_atの"、ヌル:偽 t.integer "user_idは" t.integer "guest_id" t.integer "product_idの" t.index [ "guest_id"]、名称: "index_carts_on_guest_id" t.index [ "PRODUCT_ID"]、名称: "index_carts_on_product_id" t.index [ "USER_ID"]、名称: "index_carts_on_user_id" 端 – Jake

+0

CREATE_TABLE "製品 "、力::カスケードdo | t | t.string "PRODUCT_NAME" t.string "SKU" t.integer "価格" t.integer "年" "在庫状況" t.integer "数量" t.string "サイズ" t.boolean t.text "説明" t.integer "のuser_id" t.integerは t.integer "CATEGORY_ID" t.stringを "guest_id" "カテゴリ" t.index [ "CATEGORY_ID"]、名称: "index_products_on_category_id" 「index_products_on_user_id」 end – Jake

答えて

0

商品モデルにcart_idという属性がありません。そのため、NoMethodErrorです。

対応する移行を作成して追加し、db:migrateを実行してスキーマの変更を維持し、再試行することができます。

$ rails g migration add_cart_to_products cart:references 
$ rails db:migrate 

product.cart_id逢引はそうRailsは存在しない製品というローカル変数を、見つけようとしますeachブロック内でなければなりません。

require 'csv' 

csv_text = File.read(Rails.root.join('lib', 'seeds', 'IronGloryInventory.csv')) 
csv = CSV.parse(csv_text, headers: true, encoding: 'ISO-8859-1') 
csv.each do |row| 
    product = Product.new 
    product.product_name = row['Product'] 
    product.sku = row['SKU'] 
    product.price = row['Price'] 
    product.year = row['Year'] 
    product.quantity = row['Available'].gsub(/\:|\D/, '') 
    product.size = row['Available'].gsub(/\:|\d/, '') 
    product.category = row['Category'] 
    product.description = row['Description'] 
    product.cart_id = 1 
    product.save 
    puts "#{product.product_name}, #{product.year}, #{product.size}, #{product.category} " 
end 
関連する問題