Rails通过迁移填充多态关联

时间:2013-12-03 12:05:42

标签: ruby-on-rails migration polymorphic-associations

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

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

的各种管理模型中

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

我知道我可以做这样的事情来设置默认的

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

但如果我已经创建了表格,我怎样才能通过迁移为关联设置默认值?

编辑 - 这样你就可以看到我做了什么

1.migration

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

  3. 运行迁移。现在,将成员添加到AlphaBravo管理层就像bravo_management.members.new(:name =&gt;'rob')

    一样简单

1 个答案:

答案 0 :(得分:1)

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

回滚特定的迁移

rake db:migrate:down VERSION=1234123412341234

作为answered here,但请注意,这不是该特定问题的可接受答案,即使它可能有很大意义。