Rails rake任务更改数据库中的列值

时间:2015-07-09 19:14:21

标签: ruby-on-rails ruby regex postgresql

我的pgsql数据库中的一个表格有一个名为&#34的列;持续时间"它目前存储一个字符串,例如.." 5m 21s" ..意思是5分21秒。

我正在创建一个rake任务,将这些重新格式化为总秒数。

所以" 5分21秒"会成为" 321"。

...现在我可以写一些像这样的内容,但我不确定如何构建查询本身。

desc 'Change call duration format'
task calls_format_fix: :environment do

    # Service::CallsReport.where('duration')... 
    # all nums before 'm' * 60 + nums before 's'.. then remove all alpha characters.. (do this with regex? ([0-9]*)m\s+([0-9]*)s)

end

1 个答案:

答案 0 :(得分:0)

想出来!这是我的代码和查询,其中包含我正在做的更改列值的注释。不确定这是最好的解决方案,但它确实有效!

desc 'Change call duration format from minutes and seconds to just seconds' 
task calls_reformat: :environment do

   #store all calls in durationValues
   durationValues = Service::CallsReport.all

   #loop through each as 'call'
   durationValues.each do |call|

     #regex to capture minutes and seconds
     call.duration.match(/([0-9]*)m\s+([0-9]*)s/)

     #store the first match ($1) and multiply it by 60 in minToSec
     minToSec = $1.to_i * 60

     #add minToSec to matched seconds from regex ($2)
     totalValue = minToSec + $2.to_i

     #update the value of call duration
     call.update(duration: totalValue)
   end
end