【问题标题】:Rename foreign keys automatically in activerecord在活动记录中自动重命名外键
【发布时间】:2022-03-23 22:57:35
【问题描述】:

我正在做一个 Rails 迁移来重命名一个表,我想自动重命名它的外键。例如。一个User 有很多posts,我将User 重命名为Person

def change
  rename_table :users, :people
end

我想像这样自动创建迁移

def change
  rename_column :posts, :user_id, :person_id
end

我想从迁移中获取模型并查看其has_many 模型,例如如this answer 中所述。有没有更简单的方法?

【问题讨论】:

  • 我认为这是不可能的。这太容易出错了。
  • 我喜欢这个变化。我一直不明白为什么软件开发人员(如毒贩)习惯称他们的客户为 users

标签: ruby-on-rails ruby activerecord rails-migrations


【解决方案1】:

如果 Rails 提供重命名外键,那就太好了,但我不知道如何告诉它这样做。 但是,您可以对引用 users 的每个表执行以下操作:

remove_foreign_key :posts, :users
rename_column      :posts, :user_id, :person_id
add_foreign_key    :posts, :people

这会保留您已有的引用。

请注意表名,因为remove_foreign_key 不会为您提供复数名称,如果您忘记这样做(有些生成器会这样做,或者在您使用单数而不是复数的情况下会警告您)。

【讨论】:

    【解决方案2】:

    在 Rails 6 中,您只需执行 rename_tablerename_column 即可,Rails 会为您处理外键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      相关资源
      最近更新 更多