【发布时间】:2014-08-31 23:20:39
【问题描述】:
我正在尝试根据来自另一列的分隔字符串向我的模型添加一个最大和最小列:
804025|1356906|2246774
所以最小值应该是: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]
但它在我的迁移文件中不起作用,在其他地方也不起作用(例如我的模型)。谁能告诉我这是为什么?
【问题讨论】:
-
你在哪里定义
nums_a? -
它在第一个
if中定义,因为前导永远不能为空,但我已经编辑了代码来处理leading为空的情况。
标签: ruby-on-rails split rails-activerecord rails-migrations