在 activerecord 中自动重命名外键

dim*_*mid 3 ruby activerecord ruby-on-rails rails-migrations

我正在进行 Rails 迁移以重命名表,并且我想自动重命名其外键。例如 aUser有很多posts,我重命名UserPerson

def change
  rename_table :users, :people
end
Run Code Online (Sandbox Code Playgroud)

我想创建自动迁移,例如

def change
  rename_column :posts, :user_id, :person_id
end
Run Code Online (Sandbox Code Playgroud)

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

Gou*_*ven 5

如果 Rails 能够重命名外键,那就太好了,但我没有找到如何告诉它这样做。但是,您可以对每个表引用执行以下操作users

remove_foreign_key :posts, :users
rename_column      :posts, :user_id, :person_id
add_foreign_key    :posts, :people
Run Code Online (Sandbox Code Playgroud)

这会保留您已有的参考文献。

请小心表名,因为remove_foreign_key如果您忘记这样做,表名不会为您复数(某些生成器会这样做,或者在您使用单数而不是复数时警告您)。