我的消息模型有用户和团队成员(两者都是用户)。 模型是:
# message.rb
class Message < ActiveRecord::Base
belongs_to :user
belongs_to :teammember, :class_name => "User", :foreign_key => 'teammember_id'
end
# user.rb
class User < ActiveRecord::Base
has_many :messages
end
我有这个迁移:
class CreateMessages < ActiveRecord::Migration
def change
create_table :messages do |t|
t.references :user, index: true, foreign_key: true
t.references :teammember, index: true, foreign_key: true
t.text :body
t.boolean :read, default: false
t.timestamps null: false
end
end
end
当我在本地(使用sqlite3)运行 rake db:migrate 时,一切正常。 问题是当我部署到heroku(使用postgresql)并运行
时heroku run rake db:migrate
它引发了下一个错误:
PG :: UndefinedTable:错误:关系“teammembers”不存在 :ALTER TABLE“messages”ADD CONSTRAINT“fk_rails_7efc67ccc9” 外键(“teammember_id”) 参考“teammembers”(“id”)
您知道问题是什么,我该如何解决?
答案 0 :(得分:2)
Rails根据关联猜测,因为你引用了一个表,它无法通过关联来确定你必须自己添加它。
class CreateMessages < ActiveRecord::Migration
def change
create_table :messages do |t|
t.references :user, index: true, foreign_key: true
t.references :teammember, index: true
t.text :body
t.boolean :read, default: false
t.timestamps null: false
end
add_foreign_key :messages, :users, column: :teammember_id
end
end