【问题标题】:Rails migration - changing the attribute name of a modelRails 迁移 - 更改模型的属性名称
【发布时间】:2018-04-20 17:39:03
【问题描述】:

Comment 的 Rails 模型中,created_atupdated_at 属性由 ActiveRecord::Migration 通过 t.timestamps 自动提供。

当前日期属性在 comments 表的 db ( postgresql ) 中有值。我想删除Comment 模型中的date 属性,并在执行此操作的同时将created_at 属性的comments db 表值更新为date 属性中的值。

我该怎么做呢?

【问题讨论】:

  • 您为什么要这样做? created_at 应该具有创建记录的准确日期时间。我只想删除多余的date 列。

标签: ruby-on-rails postgresql database-migration rails-migrations


【解决方案1】:

您可以如下在迁移文件中编写rails代码来更新列值。

假设列date的数据类型是timestamp

class RemoveDateFromComment < ActiveRecord::Migration
  def up
    Comment.all.each do |comment|
      comment.update(created_at: comment.date)
    end

    remove_column :comments, :date, :timestamp
  end

  def down
    add_column :comments, :date, :timestamp

    Comment.all.each do |comment|
      comment.update(date: comment.created_at)
    end
  end
end

【讨论】:

  • 好 - 这在大多数情况下都有效,除了在应用迁移之前有没有办法恢复到 created_at 列中的现有值?
  • 在应用迁移之前恢复到created_at 列中的现有值是什么意思?抱歉,我听不懂。
  • created_at 在我们应用 up 迁移之前为每条评论设置了一些值。如果我们进行 down 迁移,有没有办法恢复这些值?
  • 不,不可能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 2020-11-21
相关资源
最近更新 更多