Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 导出为CSV访问数组元素并插入换行符_Ruby On Rails_Csv_Gem_Export To Csv - Fatal编程技术网

Ruby on rails 导出为CSV访问数组元素并插入换行符

Ruby on rails 导出为CSV访问数组元素并插入换行符,ruby-on-rails,csv,gem,export-to-csv,Ruby On Rails,Csv,Gem,Export To Csv,我在jobs集合中的Mongo中存储了一个文档,如下所示: "products" : [ { "id" : "51bc0cc39727911120000145", "price" : 19, "quantity" : 1, "tax" : 0 }, { "id" : "51bc0cc39727911120000171", "price" : 14, "quantity" : 1, "tax" : 0 }, { "id" : "51bc0cca

我在jobs集合中的Mongo中存储了一个文档,如下所示:

"products" : [  {   "id" : "51bc0cc39727911120000145",  "price" : 19,   "quantity" : 1,     "tax" : 0 },    {   "id" : "51bc0cc39727911120000171",  "price" : 14,   "quantity" : 1,     "tax" : 0 },    {   "id" : "51bc0cca9727911120000a23",  "price" : 308,  "quantity" : 1,     "tax" : 0.092500001192093 } ]
products是一组数组。当您导出为CSV时,当您访问“products”键时(自然地),这整行将打印出来

我需要做的是:

到达产品内部并抓取每个元素,在CSV的相应列中打印它们,并在CSV中插入换行符,以便它们在相应列下对齐

比如:

价格数量税 价格数量税 价格数量税

左上方的第1行有实际的作业编号,但第2行和第3行没有(这是多余的)

疯狂的部分是我需要一些逻辑,无论有多少部分被添加到工作中(从无到无限)

有人知道怎么做吗

我使用逗号gem,因此我的模型中有一些代码:

产品做|产品| #我在这里尝试过数不清的组合,但都不管用 结束

救命啊

更新:

类似的东西从产品中获得第一个元素(以及结构相同的支付)


关于for循环逻辑有什么想法吗?

也许像这样的东西就可以了

column_names = ["id","price","quantity","tax"] 
CSV.generate do |csv|
   csv << column_names
   products.each do |p|
     @pid = Inventory.find_by_id(p["id"])
     csv << [@pid ? @pid.parts_name : "none", p["price"], p["quantity"], (p["tax"].to_f * (p["price"].to_f * p["quantity"].to_i)).round(2) ]
   end
 end
column_name=[“id”、“price”、“quantity”、“tax”]
CSV.generate do | CSV|

csv以下是最终解决方案的简介:

products do |products|
      @prod=[]
      products.each do |p|
        @pid = p["id"]
        @pid = Inventory.find_by_id(@pid)
        if @pid == nil
          @prod << "None"
        else
          @prod << @pid.parts_name
        end
      end
      @prod.to_sentence(:words_connector=>"\r",:two_words_connector=>"\r",:last_word_connector=>"\r")
    end
products do | products|
@产品=[]
产品。每个产品都有| p|
@pid=p[“id”]
@pid=库存。通过_id(@pid)查找_
如果@pid==nil
@产品“\r”,:最后一个单词\u连接器=>“\r”)
结束

最后一部分是“去他妈的,我会尝试一切”的方法之一,我偶然发现了“to_句子”方法的另一种用法。它可以工作…

看起来产品是一个哈希数组!
products do |products|
      @prod=[]
      products.each do |p|
        @pid = p["id"]
        @pid = Inventory.find_by_id(@pid)
        if @pid == nil
          @prod << "None"
        else
          @prod << @pid.parts_name
        end
      end
      @prod.to_sentence(:words_connector=>"\r",:two_words_connector=>"\r",:last_word_connector=>"\r")
    end