【问题标题】:Rails: remove reference relationshipRails:删除引用关系
【发布时间】:2015-10-25 13:07:30
【问题描述】:

我对教程中的以下代码感到困惑。

目标是从表 books 中删除引用键 genre_id

class RemoveGenreFromBooks < ActiveRecord::Migration

    def up
        remove_index :books, column: [:genre_id]
        remove_column :books, :genre_id
    end

    def down
        add_reference :books, :genre, index: true
    end

end

但我不明白remove_index :books, column: [:genre_id] 是什么意思

此外,我在down 方法中没有得到index: true。

如果我需要添加关系,为什么我不能直接输入

class Addrelationship < ActiveRecord::Migration
    def change
            add_reference :books, :genre
    end

【问题讨论】:

    标签: ruby-on-rails database relationship migrate


    【解决方案1】:

    rake db:rollback STEP=1

    如果要回滚的迁移是最后应用的迁移,则可以这样做。您可以将 1 替换为您想要返回的任意数量的迁移。

    【讨论】:

    • rake db:rollback是否默认回滚最后一次迁移?
    • STEP=1、STEP=2 等等是您想要回滚迁移的步骤。
    • 其实我很困惑为什么我需要输入up和down方法而不是输入change方法来回滚add_reference迁移
    • 我改了题名,我想知道的重点是up和down方法中的column: [:genre_id]和index: true相对
    【解决方案2】:

    既然有添加引用的方法,也有一个要删除的方法 - remove_reference

    语法是:remove_reference(table_name, ref_name, options = {})

    所以在你的情况下,删除Genre 的引用:

    class RemoveGenreFromBooks < ActiveRecord::Migration
      def change
        remove_reference :books, :genre, index:true, foreign_key: true
      end
    end
    

    选项foreign_key: true 也会从books 表中删除外键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多