当前位置: 首页 > 知识库问答 >
问题:

Rake任务以数据库更新特定产品

郭思聪
2023-03-14

嗨,我有一个充满产品的数据库,我需要安排一个rake任务运行每周。我不太确定如何编写rake任务。例如,我有一个id=1name=“testname”description=“description”sku=“198”price=12.99的产品,我需要上传一个带有name=“testname”的csv,并将价格更新为13.99,同时保持id不变。这是我尝试到目前为止,但它不是完整的,如果有人能帮助,这将是伟大的。

require 'csv'
desc "Updates Products inside an ActiveRecord table"
task :update_prods, [:filename] => :environment do
    products = Spree::Product.all
    CSV.foreach('update_prods.csv', :headers => true) do |row|
    Spree::Product.update!(row.to_hash)
end
end

共有1个答案

郑嘉年
2023-03-14

下面是我们如何将产品从Shopify导入Spree的一个要点,它可以给你一些关于如何进行https://gist.github.com/dgross881/b4f1ac96bafa2e29be7f的想法。

def update_products

  puts 'Updating Products...'
  require 'csv'
  products_csv = File.read(Rails.root.join('lib/assets/products_list.csv'))
  products = CSV.parse(products_csv, headers: true)

  products.each_with_index do |row, index|
    Rails.logger.info { [#{index + 1}..#{products.length}] Updating product: #{row['title']} }
    product = Spree::Product.find!(row['id'])
    update_product = product.update_attributes(name: row['title'], description:row['description'],
    meta_title: row['seo_title'], meta_description: row['seo_description'],
    meta_keywords: "#{row['handle']}, #{row['title']}, the Squirrelz",
    available_on: Time.zone.now, price: row['price'],
    shipping_category: Spree::ShippingCategory.find_by!(name: 'Shipping'))

    update_product.tag_list = row['tags']
    update_product.slug = row['handle']
    update_product.save!
  end
  Rails.logger.info { "Finished Updating Products" }
end

def update_variants
  puts 'updating Variants...'
  require 'csv'
  products_variants_csv =File.read(Rails.root.join('lib/assets/variants_list.csv'))

  products_variants = CSV.parse(products_variants_csv, headers: true)

  products_variants.each_with_index do |row, index|
    puts "[#{index + 1}..#{products_variants.length}] Adding Variant (#{row['sku']} to Product: #{Spree::Product.find_by!(slug: row['handle']).name})"
    variant = Spree::Variant.find_by!(sku: row['sku']
    update_variant = variant.update_attributes!(sku: row['sku'], stock_items_count: row['qty'], cost_price: row['price'], weight: row['weight']

    unless row['option1'].blank?
      variant.option_values << Spree::OptionValue.find_by!(name: row['option1'])
    end
    unless row['option2'].blank?
      variant.option_values << Spree::OptionValue.find_by!(name: row['option2'])
    end
    variant.save!
  end
  puts 'Updated Variants'
end
 类似资料:
  • 我有一个带有Mongoid数据库的Rails 4应用程序,并想引入一个沙盒环境进行测试。有一些数据(两个模型),我想从生产数据库复制到沙盒。 我会用一个rake任务来完成这个任务,这个任务被cronjob调用。然而,在这个rake任务中,我不确定如何建立到数据库的两个连接,并对不同的数据库使用相同的模型。 我也在考虑在mongodb层做这件事(就像他们在这里做的那样,如何在mongodb中将一个集

  • 我是Android的新手,需要一些帮助。 我的问题是我到底什么时候调用命令,以及room如何知道哪一行发生了更改?我不想更新到整个表。 如果我应该用另一种方式解释,请告诉我。

  • 我想知道ehcache是否有办法检测数据库更新/插入(spring/java,hibernate web应用程序),并使用数据库中的当前(最新)数据刷新其缓存。如果没有,检测数据库更新的最佳方法是什么,以保持与缓存和数据库之间的数据同步?

  • 我创建数据库,使用curentdate(1-25)作为,使用room(08-00_11-00_karpet1-)作为>父id)。 问题一 使用此布局设计,如何禁用已订购的按钮,以指示该房间不再可用。 (例如,1-28日的用户订单karpet 14-17,当用户创建订单数据库时,将根据日期(parentid)更新数据库) 问题二 当特定日期点击时,房间按钮将根据上的数据禁用,并在该日期(),如果没有

  • 问题内容: 我正在使用()查找PostLikes表中的(PostId,UserId),如果找到该行,则用于生成delete指令并删除基础行,如果未找到该行,则用于生成insert命令并使用将该行插入表中。但是该行未插入数据库中的表中。这是我到目前为止所做的 和表 PostLikes(LikeId,PostId,UserId) 问题答案: 有几个问题: 您正在寻找重复使用相同的命令,这两个检测行是否

  • 问题内容: 我正在使用.NET Web窗体和数据库作为数据源来构建一个简单的站点。 问题是:我有一个正常工作的后台槽,可以创建,修改和删除新页面。 虽然我可以创建和删除,但是编辑功能不起作用。 我意识到问题可能出在查询中,因为代码对于其他功能运行正常。 这是查询: 我不太喜欢SQL,我做错什么了吗? 先感谢您 编辑N掳2。目前,该查询无法正常工作,基本上,某些内容和标题中带有撇号,并且当我更新该特