Rails迁移,使用split-split()添加新列不起作用

时间:2014-08-31 23:20:40

标签: ruby-on-rails split rails-activerecord rails-migrations

我正在尝试根据另一列的分隔字符串向模型添加max和min列:

804025|1356906|2246774

所以min应为:804025,最大值应为:2246774

我正在使用此迁移脚本:

def change
    add_column :mer14s, :rmax, :int
    add_column :mer14s, :rmin, :int
    Mer14.all.each do |mer|
        nums_a = []
        if mer.leading
            nums_a += mer.leading.split('|').map(&:to_i)
            puts mer.leading
            puts nums_a
        end
        if mer.lagging
            nums_a += mer.lagging.split('|').map(&:to_i)
        end
        if nums_a.length > 0
            mer.update_attributes(:rmax => nums_a.max)
            mer.update_attributes(:rmin => nums_a.min)
        end
    end
  end

但是,split('|')仅返回第一个元素。

puts leading
puts num_a 

输出:

804025|1356906|2246774
804025

我已确认它可以在rails console中使用:

Mer14.all[18].leading.split('|').map(&:to_i)

输出 [1189919, 3219748, 4010566]

但它在我的迁移文件中不起作用,也不在其他地方起作用(例如我的模型)。谁能告诉我为什么会这样?

2 个答案:

答案 0 :(得分:1)

由于某种原因,split方法不喜欢在rails中使用字符串。而是使用正则表达式,所以原来的:

nums_a += mer.leading.split('|').map(&:to_i)

变为:

nums_a += mer.leading.split(/\|/).map(&:to_i)

答案 1 :(得分:0)

这对我有用:

a = "804025|1356906|2246774"
a.split('|').map(&:to_i).max
=> 2246774
a.split('|').map(&:to_i).min
=> 804025