Rails 通过迁移填充多态关联



嘿,我正在尝试为我今天早上创建的多态关联编写迁移。

在为名为management_type的成员表创建新列时,由于成员已经属于管理层,因此我免费拥有management_id。我将has_many :members, :as => :management添加到具有成员的各种管理模型中

这允许我向AlphaManagementBravoManagement添加成员,但所有现有成员仅在AlphaManagement上添加,因为我刚刚添加了BravoManagemnent. 因此,所有现有成员都有一个 null 值用于management_type。 我只想创建一个将遍历每个元组的迁移,然后将AlphaManagement关联添加到management_type列,但前提是其为 null。 以便以后迁移我不会意外将它们全部更改为AlphaManagement

我看到我可以做这样的事情来设置默认值

create_table :products do |t|
  t.references :attachment, :polymorphic => {:default => 'Photo'}
end

但是,如果我已经创建了表,如何通过迁移为关联设置默认值?

编辑 - 只是为了让你可以看到我做了什么

1.迁移

class AddingManagementTypeToMembers < ActiveRecord::Migration
  def up
    add_column :members, :management_type, :string
  end
  def down
    remove_column :members, :management_type
  end
end
  1. belongs_to :management, :polymorphic => true添加到成员类。 注释 经理 董事和执行官都继承自成员。

  2. 管理运行的方式发生了变化,但我们希望保留遗留报告,因此我们需要旧的管理和新的管理模型。 所以在这两个地方,我都添加了has_many :members, :as => :management

运行迁移。现在,将成员添加到AlphaBravo管理就像bravo_management.members.new(:name => 'rob'一样简单

我以前遇到过同样的问题。 您只想使用

rake db:migrate:down VERSION=1234123412341234

正如这里所回答的,但请注意,这不是该特定问题的公认答案,即使它可能很有意义。

最新更新