我正在尝试根据另一列的分隔字符串向模型添加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]
但它在我的迁移文件中不起作用,也不在其他地方起作用(例如我的模型)。谁能告诉我为什么会这样?
答案 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