【问题标题】:Rails database table changed name, but index in another table refers to old nameRails 数据库表更改名称,但另一个表中的索引引用旧名称
【发布时间】:2016-02-02 21:56:46
【问题描述】:

我将表名从“地址”更改为“位置”。这是两个模型

class Location < ActiveRecord::Base
  has_many :years, dependent: :destroy 
  has_many :people, through: :years 

class Year < ActiveRecord::Base
  belongs_to :location
  belongs_to :person

我通过rename_table :addresses, :locations 迁移进行了更改,并更改了相关控制器和视图中的文件夹、文件和所有引用的名称。除了 Years 数据库在 years 表中仍有一列 address_id 之外,大多数情况似乎都正常。显然需要location_id。我可以只迁移更改吗?是否会保留指向新命名数据库的链接?我已经备份了数据库并制作了 Years 输出的电子表格副本。

项目的预更改版本位于 https://bitbucket.org/MtnBiker/crores5/src。在整理好之前,我不愿意将更改合并到 master 中。

感谢您的建议。

PS。我不建议更改表名,但我在地址表中有一个名为 address 的字段,并希望摆脱这种混乱。不用说,我是新手。

【问题讨论】:

    标签: ruby-on-rails postgresql ruby-on-rails-4 jointable


    【解决方案1】:

    我认为您正在寻找的只是简单地重命名Years 表中的列:

    rename_column :table_name, :old_column, :new_column
    

    也许

    rename_column :years, :address_id, :location_id
    

    迁移后,years 表将有一个 location_id 列,该列的值与之前的值相同。

    编辑:任何列都不需要任何特定名称(尽管如果您的应用程序以“rails 方式”执行操作几乎总是更容易)。例如,您可以定义 Years 模型以通过以下方式引用 Location 模型具有“不正确”名称的列。

    class Year < ActiveRecord::Base
      belongs_to :location, foreign_key: :address_id, primary_key: :id
    

    【讨论】:

    • 谢谢。我是这么想的,但想确保我没有落入陷阱。似乎运作良好。我只是认为数据库可能有一些我缺少的结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2019-06-11
    • 2019-01-08
    相关资源
    最近更新 更多