2015-10-16 71 views
1

多个引用我有一个具有用户teammember(均为用户)消息模型。 型号有:Rails的:到相同型号的错误

# 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的)一切工作正常。 的问题是,当我部署到Heroku的(使用PostgreSQL的),然后运行

heroku run rake db:migrate 

这又引出了另一个错误:

PG::UndefinedTable: ERROR: relation "teammembers" does not exist : ALTER TABLE "messages" ADD CONSTRAINT "fk_rails_7efc67ccc9" FOREIGN KEY ("teammember_id") REFERENCES "teammembers" ("id")

你知道是什么问题,我该如何解决?

回答

1

基于关联的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 
+2

作为补充答案,还有的OP本地机器上没有任何怨言运行'sqlite'因为轨道SQLite的适配器不支持foreign_key(所以完全忽略了这个问题的一部分),只有MySQL的&PG适配器做HTTP ://edgeguides.rubyonrails.org/4_2_release_notes.html#foreign-key-support – Nimir

+0

@Nimir,谢谢。这是一个有趣的观点。 –