前言:我是Ruby / Rails的新手
所以我在'邀请'表中有一个名为“name”的列,我想将其重命名为“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。感谢您的帮助,谢谢。
答案 0 :(得分:2)
测试环境使用自己的数据库架构。确保您也更新了测试数据库:
bundle exec rake db:test:prepare
答案 1 :(得分:0)
您可以更改迁移文件名,但必须执行以下几个步骤: