更改 ruby​​ on Rails 中表中的列

Kah*_*hsn 1 ruby migration ruby-on-rails

我有一个名为 的迁移文件[timestamp]_create_posts.rb。我发现我用错误的数据类型创建了列。我需要t.text :content代替t.string :content.

我包含上述文件中的代码:

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.string :content

      t.timestamps null: false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我有点知道我不应该直接更改文件,而是回滚迁移并更改架构并再次进行迁移。但我不确定这是否是正确的方法。如果有人能指导我完成这个任务,那就太好了。我对 Rails 不太熟悉。

Ale*_*kin 5

你不应该回滚任何东西。您应该创建一个新的迁移,这将更改包含以下内容的列:

class UpdatePostsChangeContentColumn < ActiveRecord::Migration
  def change
    change_column :posts, :content, :text, limit: 60000 # or whatever
  end
end
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,提供此迁移的合理回滚:

class UpdatePostsChangeContentColumn < ActiveRecord::Migration
  def up
    change_column :posts, :content, :text, limit: 60000 # or whatever
  end
  # back to previous version
  def down
    change_column :posts, :content, :string
  end
end
Run Code Online (Sandbox Code Playgroud)