如何在ruby on rails中的表内部存储数组的值?

时间:2019-02-04 05:37:47

标签: ruby-on-rails database loops

我有两个名为“ imports”和“ import_details”的表。在“导入”表内是已使用carrierwave上传的日志文件。我有一个读取日志文件并从每个条目中提取所需数据的方法(为此我使用了regex)。我的regex表达式共有12个捕获组,每个捕获组都是我要存储在“ import_details”表中的值。

我的问题是我不知道如何在regex表达式到达第12个捕获组之后遍历每个变量并将它们存储在每一行中。

我的create_imports.rb:

class CreateImports < ActiveRecord::Migration[5.2]
  def change
    create_table :imports do |t|
      t.string :name
      t.string :attachment

      t.timestamps
    end
  end
end

create_import_details.rb:

class CreateImportDetails < ActiveRecord::Migration[5.2]
  def change
    create_table :import_details do |t|
      t.string :controller
      t.string :controllermethod
      t.string :ipaddress
      t.datetime :datetime
      t.string :methodname
      t.string :sessionid
      t.string :cycletime
      t.string :restimeview
      t.string :restimerecord
      t.integer :statuscode
      t.string :statusname
      t.string :urladdress

      t.timestamps
    end
  end
end

我的读取日志文件的方法:

def processimport
    path = Dir.glob('/sample/file/path/'@import = Import.find(params[:id])'/*.log').first
    regex = /sampleregexexpression/

    samplefile = File.open(path)
    string = File.read(samplefile)

    string.scan(regex).each do|x|
      puts x
    end 
  end

我的processimport方法当前所做的只是打印出我的正则表达式获取的每个捕获组的值。知道如何遍历它们并存储在数据库中吗?

样本响应

string.scan(regex).each do|x|
  puts x
end

看起来像这样:

SampleController
create
10.910.992.227
2020-12-01 12:00:00
POST
12mnd9adkmc82js9akjnas98sdv3
0.12995 (7 reqs/sec)
0.00027 (0%)
0.09836 (75%)
201
Created
[https://www.soap.com/api/sample.xml]
AnotherController
index
888.12.445.247
2020-12-01 12:00:00
GET
ertye73do928hxksmsu2edjejend783k
0.00905 (110 reqs/sec)
0.00007 (0%)
0.00281 (31%)
200
OK
[https://www.samplecloud.com/api/anothersample.xml?sample_id=9002&after=2020-12-01 12:00:00Z&page=1]
ExampleController
index
838.33.55.776
2020-12-01 12:00:00
GET
7282849jfjdkdo2a29snxmmjscnssdn8
0.23466 (4 reqs/sec)
0.15961 (68%)
0.06614 (28%)
200
OK
[https://customer.example.com/en/example]
ThisIsAController
show
992.334.556.1
2020-12-01 12:00:00
GET
jasd7839njsdnlkal3898259adansdn
0.26166 (3 reqs/sec)
0.13863 (52%)
0.11492 (43%)
200
OK
[https://www.sample.com/en/soap/shampoo]

在此示例中,一个日志文件中有4个日志文件条目,每个条目以Controller(捕获组1)开头,以URL地址(捕获组12)结尾。目的是在数据库表中将第一组捕获组存储在一行中,将第二组捕获组存储在下一行,依此类推。

1 个答案:

答案 0 :(得分:0)

我将在循环中创建所需值的散列:

    my_hash = {}
    string.scan(regex).each do|x|
      my_hash[:key] = x
    end 

只要每个键与表中的一列完全匹配,您就可以调用

ImportDetails.create(my_hash)