0

我正在使用Rails 4.我有一個用戶模型。現在我想創建一個名爲Following的新模型。表followings將具有user_idfollowed_user_id列,這些列是引用users表中的記錄的外鍵。如何在Active Record遷移中有兩個外鍵引用同一模型?

我有一個活動記錄遷移創建followings表,像

class CreateFollowings < ActiveRecord::Migration 
    def change 
     create_table :followings do |t| 
      t.references :user, index: true, foreign_key: true 
     end 
    end 
end 

這將創建一個列user_id。如何使用t.references語法創建followed_user_id列?

這不是一個特定於Rails 4的問題。所以如果Rails 5或Rails 3中可以這樣做,請評論。

我不問如何設置模型。這個問題只涉及數據庫中的遷移和建立表。

+0

嘗試't.references:followed_user,指數:真,foreign_key:

什麼問題,如果你創建2列,併爲它們添加索引是真實的,CLASS_NAME: 'User'' – Pavan

+0

這沒有按'工作。我得到錯誤'PG :: UndefinedTable:錯誤:關係「followed_users」不存在' –

回答

0

嘗試改變這樣的遷移:

class CreateFollowings < ActiveRecord::Migration 
    create_table :followings do |t| 
    def up 
     t.references :user, index: true, foreign_key: true 
     t.references :followed_user, index: true, foreign_key: true 
    end 
    end 
end 

而且你的模型也應該有它同belongs_to的關係。 因此,在您的模型中添加以下關聯。

Followeing型號:

class Following < ActiveRecord::Base 
    belongs_to :user, class_name => 'User' 
    belongs_to :followed_user, class_name => 'User' 
end 

用戶模型:

class User < ActiveRecord::Base 
    has_many :users, :class_name => 'Following', :foreign_key => 'user_id' 
    has_many :followed_users, :class_name => 'Following', :foreign_key => 'followed_user_id' 
end 

另一種創建如下外鍵:

def change 
    add_foreign_key :followings, :users, column: :followed_user_id 
end 

Api dock here.

+0

您有'def_'在'create_table'內?你甚至試圖運行這種遷移?我對建立模型不感興趣。我的問題只是關於遷移。 –

0

無法使用t.references語法創建followed_user_id列而不存在followed_users表。即使您可以使用該語法,仍然必須在模型中設置關聯。

class TestFollowing < ActiveRecord::Migration 
    def change 
    create_table :following do |t| 
     t.integer :user_id, index: true 
     t.integer :folowed_user_id, index: true 
    end 
    end 
end 
相關問題