我正在尝试使用下面的迁移添加记录,然后使用新记录ID更新4个其他记录。新记录添加正常但更新没有发生。
def change
ItemsCategory.reset_column_information
hub = ItemsCategory.create name: 'HUB RECORD'
ItemsCategory.where(id: 1..4).each do |p|
p.update_attribute :parent_id, hub.id
p.save
end
ItemsCategory.build_ancestry_from_parent_ids!
end
答案 0 :(得分:0)
您不应在迁移中更改内容。迁移专门用于更改架构。内容迁移是一种反模式。您应该使用自定义rake任务处理内容。
答案 1 :(得分:0)
肖恩100%正确。您不应使用迁移来修改表内容,而只应使用模式。使用自定义rake任务来执行此操作。我举个例子。
使用命令“rake db:color”加载颜色表将是:
将此代码放在lib / tasks / color.rake中:
namespace "db" do
desc "Load Color database"
task color: :environment do |t|
APP_PATH = File.expand_path('../../../db', __FILE__)
puts "Running #{APP_PATH}/color.rb"
require "#{APP_PATH}/color"
end
end
将此代码放在db / color.rb中:
# Run from lib/tasks/color.rake using:
# rake db:color
# or with tools/rake
Color.delete_all
colors = ["Black", "White", "Silver", "Red", "Blue", "Green", "Other"]
colors.each do |c|
Color.create color: c
end