Я пытаюсь добавить максимум и мин колонки для моей модели, на основе разделителей строки из другого столбца:Rails миграция, добавить новый столбец, используя сплит - сплит() не работает
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'? – zishe
Он был определен в первом 'if', поскольку ведущий никогда не должен быть пустым, но я отредактировал код, чтобы иметь дело с случаем, когда' leading' равно null. – Darkstarone