使用散列值填充数据库

时间:2015-07-03 01:56:25

标签: ruby database activerecord serialization

我还是Ruby的新手,并且很难将数据轻松推送到我的db ..我有这个哈希数组

mine = [{:sellersku=>"2273500028", :asin=>"B0076E32F8", :price=>"15.49"}, 
{:sellersku=>"5154464774", :asin=>"B00013J6HY", :price=>"445.94"}, 
{:sellersku=>"5164589013", :asin=>"B007CB4OFM", :price=>"51.62"}]

我希望将其放入此表

create_table "products", force: :cascade do |t|
t.string   "sellersku"
t.string   "asin"
t.string   "price"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

最好的方法是什么?我不想将整个哈希保存在一列中,哈希键对应于db列名。以下给出了一个错误

first = Product.new
first.sellersku = "2273500028"
first.save

与Product.create相同

错误是

uninitialized constant Product (NameError)

我想以最有效的方式做到这一点,我的阵列将达到5到6,000个哈希值,我需要能够快速访问数据..

1 个答案:

答案 0 :(得分:1)

假设您使用的是rails应用,那么您的模型文件夹中是否有product.rb文件?

它至少包含类定义:

class Product < ActiveRecord::Base
  #add whatever else you need in here
end

您必须决定如何初始化您的产品。您可以使用已有的所有参数初始化它们,也可以在创建对象后逐行进行初始化。

使用示例中的mine变量,将每个哈希保存为新行的一种简单方法是循环遍历它并随时创建每一行。

mine.each do |product_to_save|
  product = Product.new
  product.sellersku = product_to_save[:sellersku]
  product.asin = product_to_save[:asin]
  product.price = product_to_save[:price]
  product.save
end

这是一种简化的方法。如果您的模型允许,您可能希望在初始化新记录时使用哈希:

mine.each do |product_to_save|
  product = Product.new(product_to_save)
  product.save
end

您可以使用地图和简写整个过程,如下所示:

mine.map{|product_to_save| Product.new(product_to_save).save} 

mine.map{|product_to_save| Product.create(product_to_save)}