【问题标题】:What is the down migration for adding a polymorphic reference添加多态引用的向下迁移是什么
【发布时间】:2009-10-02 22:49:47
【问题描述】:

我有以下迁移,但不知道在 down 方法中使用什么

change_table :addresses do |t|
  t.references :addressable, :polymorphic => true
end

【问题讨论】:

    标签: ruby-on-rails migration


    【解决方案1】:

    其实,

       change_table :addresses do |t|
         t.remove_references :addressable
       end
    

    会有点偏轨,不是吗?

    编辑:正如 Eben Geer 指出的那样

       change_table :addresses do |t|
         t.remove_references :addressable, :polymorphic => true
       end
    

    是这样做的正确方法。干杯!

    【讨论】:

    • 这将导致 addressable_type 列被留下。它应该是 t.remove_references :addressable, :polymorphic => true
    • 如果这个答案包含@EbenGeer他的评论,我会赞成
    【解决方案2】:
    class RemoveAddressableFromAddresses < ActiveRecord::Migration
      def change
        remove_reference :addresses, :addressable, polymorphic: true, index: true
      end
    end
    

    【讨论】:

    • 请花一点时间解释一下您的代码的作用以及它如何回答这个问题。
    • 这应该是正确的答案:remove_reference 现在可以回滚(至少从 Rails 4.2 开始)。这意味着,Rails 知道如何通过 add_reference 回滚 remove_reference。所以这段代码可以回滚(虽然数据可能会在迁移中丢失)
    【解决方案3】:
    def self.down
      change_table :addresses do |t|
        t.remove_references :addressable, :polymorphic => true
      end
    end
    

    【讨论】:

      【解决方案4】:

      有什么问题?

      def self.down
        remove_column :addresses, :addressable_type
        remove_column :addresses, :addressable_id
      end
      

      【讨论】:

      • 你是说 remove_column :addresses, :addressable 不正确吗?
      • Damian:不,只需通过一些 SQL 浏览器查看表格,您就会看到两列。
      【解决方案5】:

      这是怎么回事?

      def self.down
        remove_column :addresses, :addressable
      end
      

      【讨论】:

      • 这就是我的想法,但这是我第一次使用多态模型并感到困惑
      • 其实不应该是remove_column :addresses, :addressable
      • 糟糕,你完全正确。我应该先检查文档,而不是凭记忆。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 2020-04-10
      • 2018-10-18
      • 2017-01-06
      • 2017-10-02
      • 1970-01-01
      相关资源
      最近更新 更多