需要在迁移中更新属性

时间:2014-06-03 20:46:36

标签: ruby-on-rails migration

我正在尝试使用下面的迁移添加记录,然后使用新记录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

2 个答案:

答案 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