Обновление всей базы данных рельсов с помощью сложной функции расчета - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть стол с рельсами. (normalusers) => id, parent_id, Height. Я добавил столбец высоты позже. Теперь я хочу добавить ценность к этому. Есть ли способ, которым я могу достичь этого? Я пробовал миграцию, но она не обновляет высоты. Я думаю, что функции не работают в миграции. После переноса все строки имеют значение высоты, как и раньше.

class Latest < ActiveRecord::Migration[6.0]

  def change
      i = 1
    loop do
          i += 1
          puts i
          record=Normaluser.find(i)
          record.height=get_height(record)
          record.save!
          if i == 39
            break       # this will cause execution to exit the loop
          end
    end
  end
  def get_height(record)
      maxHeight=0
      Normaluser.where(pid: record.id).each do |f|
          tempHeight=get_height(f)
          if tempHeight > maxHeight
              maxHeight=tempHeight
          end     
      end
      return maxHeight
  end
end

1 Ответ

1 голос
/ 10 февраля 2020

Лучший способ запустить одноразовый скрипт для обновления существующих столбцов таблицы - написать задачу rake.

в каталоге lib/tasks/, создать файл с именем update_height.rake, в этом файле

namespace :update_latest_records do
  desc 'Update height column of existing Latest'
  task height: :environment do
    # your update logic goes here
  end
end

Затем в домашнем проекте выполните команду rake

RAILS_ENV=development rake update_latest_records:height

Передайте правильное значение RAILS_ENV в каждой среде, например, чтобы обновить записи на производственном сервере, оно должно быть RAILS_ENV=production

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...