所以我有一个包含大量数据的文件,我正试图将其插入数据库并将其分配给购物车。我已经开始创建了一个购物车,我只想把所有东西都分配给一个单一的购物车。问题是试图找到我应该实际放置cart_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.cart_id = 1放在t = Product.new下,我得到NoMethodError。
我已经尝试将它放在csv.each上面,并使用product.cart_id = 1,我得到一个未定义的局部变量。
我觉得它实际上应该在迭代中分配id但我无法理解它。
购物车与has_many的产品有关联,而Product有belongs_to。任何方向都会非常有用。
答案 0 :(得分:0)
您的商品模型中没有cart_id
属性,这就是NoMethodError
的原因。
您可以创建相应的迁移来添加它,运行db:migrate以在架构中保留更改并重试。
$ rails g migration add_cart_to_products cart:references
$ rails db:migrate
product.cart_id
分配必须在each
块内,否则Rails会尝试找到一个名为product的局部变量,该变量不存在。
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