在我的應用程序中,我有3個表格,用戶,列表,任務。Rails Migrations - 外鍵的替代名稱?
用戶和列表是多對多的關係,任務屬於列表,用戶可以完成任務。
對於我的遷移,當用戶完成列表時,我想將它在數據庫中完成的人存儲起來,但我不確定如何執行此操作。
我可以簡單地將t.integer :user_id
添加到我的任務遷移中,但我想將其稱爲.completed_by
。在我的用戶表中引用:user_id的東西,但名爲:completed_by?
在我的應用程序中,我有3個表格,用戶,列表,任務。Rails Migrations - 外鍵的替代名稱?
用戶和列表是多對多的關係,任務屬於列表,用戶可以完成任務。
對於我的遷移,當用戶完成列表時,我想將它在數據庫中完成的人存儲起來,但我不確定如何執行此操作。
我可以簡單地將t.integer :user_id
添加到我的任務遷移中,但我想將其稱爲.completed_by
。在我的用戶表中引用:user_id的東西,但名爲:completed_by?
正如MrDanA提到的,你可以指定一個不同的foreign_key,但是我會推薦它。如果可以的話,如果你仍然使用實體名稱約定,那麼你的數據庫結構在低級別上會更容易理解。
未來,很明顯user_id指向用戶表,而新的程序員將無法在不探索代碼的情況下在用戶表處指出completed_by點。如果你確實想擁有一個特定的名字,或者需要多個用戶關聯,那麼類似於「completed_user_id」的東西在應用和數據庫級別都會保持清晰。
然後你可以添加方法:
has_one :user
has_one :completed_by, :class_name => "User", :foreign_key => "completed_user_id"
或
has_one :user
def completed_by
self.user.id
end
等
在您的遷移,添加t.integer :completed_by
然後,在你的模型,而不是:
has_one :user
做:
has_one :user, :class_name => "User", :foreign_key => "completed_by"
甚至定製關聯的名稱,如:
has_one :completer, :class_name => "User", :foreign_key => "completed_by"