2016-08-04 31 views
3

(Rails是5.0.0版,红宝石2.3.0p0)导轨和add_foreign_key迁移:“列‘user_ID的’外键约束中引用不存在”

我要创造我的用户表之间的关联和卡表。我已经添加belongs_to :user到卡模式,has_many :cards到用户模式,创造一个与迁移:

class AddUserIdToCard < ActiveRecord::Migration[5.0] 
    def change 
    add_foreign_key :cards, :users, column: :user_id 
    end 
end 

当我运行rake db:migrate,我收到错误:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "user_id" referenced in foreign key constraint does not exist 
: ALTER TABLE "cards" ADD CONSTRAINT "fk_rails_8ef7749967" 
FOREIGN KEY ("user_id") 
    REFERENCES "users" ("id") 

现在我最初只需在迁移中添加add_column :cards, :user_id, :integer即可解决此问题,但这看起来并不很整齐,而且我担心之后会出现问题。有没有更好的方法来完成这一点?

+0

请注明的答案,当你有一分钟​​,因为它是正确的 – rmcsharry

回答

3

您正在为cards表设置user_id列的外键。但是你还没有创建参考。创建一个引用,然后添加外键以保持参照完整性。回滚与

1 class AddUserIdToCard < ActiveRecord::Migration[5.0] 
2  def change 
3  add_reference :cards, :users, index:true 
4  add_foreign_key :cards, :users 
5  end 
6 end 

一行三会创建,在cards表,以idusers表的引用(在cards创建user_id列)修改您的迁移。

第4行将在数据库级别将外键约束添加到user_id

欲了解更多,请阅读Add a reference column migration in Rails 4

+0

好了...我得到了'add_references'一个没有方法的错误,但我想'add_reference'(单数)而不是这个错误消失了。 但是,我还是得到了什么样子基本相同的错误: 'StandardError的:发生错误,这一点,并取消了所有后来迁移:' 'PG :: UndefinedColumn:错误:列“USER_ID”在国外引用键约束不存在 :ALTER TABLE“cards”ADD CONSTRAINT“fk_rails_8ef7749967” FOREIGN KEY(“user_id”) REFERENCES“users”(“id”)' –

+0

对不起。方法名是'add_reference'而不是'add_references'。我会更新它。 –