Rails - 重命名列,然后迁移



前言:我对Ruby/Rails很陌生

所以我的"邀请"表中有一列叫做"名称",我想将其重命名为"team_name"。我在迁移文件中更改了它,然后进行了回滚,然后重新运行了迁移。

class CreateInvitations < ActiveRecord::Migration
  def change
    create_table :invitations do |t|
      t.string :token
      t.string :team_name
      t.integer :number_of_uses
      t.timestamps null: false
    end
  end
end

这是我的架构现在的样子:

create_table "invitations", force: :cascade do |t|
    t.string   "token"
    t.string   "team_name"
    t.integer  "number_of_uses"
    t.datetime "created_at",     null: false
    t.datetime "updated_at",     null: false
  end

然后我去把"name"的所有实例都更改为"team_name",但现在我遇到了各种各样的错误。例如

class Invitation < ActiveRecord::Base
  has_and_belongs_to_many :users
  validates :team_name, presence: true

有了规范,

describe '#team_name' do
    it { should validate_presence_of :team_name }
  end

而 rspec 故障,

5) Invitation#team_name should require team_name to be set
     Failure/Error: it { should validate_presence_of :team_name }
     NoMethodError:
       undefined method `team_name=' for #<Invitation:0x007fd39a26def8>
     # ./spec/models/invitation_spec.rb:7:in `block (3 levels) in <top (required)>'

我得到的几乎所有错误都和这个一模一样。我确保在我的工厂中也包括更改...我不确定这里到底发生了什么。当我更改列名称并进行另一个迁移时,我是否犯了错误?同样,我还在学习Rails。感谢您的帮助,谢谢。

测试环境使用自己的数据库架构。确保同时更新测试数据库:

bundle exec rake db:test:prepare

您可以更改迁移文件名,但必须执行几个步骤:

  1. RAKE DB:回滚到查询表回滚的点。
  2. 现在更改迁移文件的名称,以及内容。
  3. 更改可能使用该表的任何模型的名称。
  4. 耙子数据库:迁移

最新更新