1
我最近遇到這段代碼。用戶有很多答案。 :class_name和:foreign_key的用途是什麼?class_name foreign_key in Rails model
class Answer < ApplicationRecord
belongs_to :user, :class_name => 'Question", :foreign_key => 'question_id'
end
我最近遇到這段代碼。用戶有很多答案。 :class_name和:foreign_key的用途是什麼?class_name foreign_key in Rails model
class Answer < ApplicationRecord
belongs_to :user, :class_name => 'Question", :foreign_key => 'question_id'
end
這裏的命名是一種奇怪的,但:class_name
的目的是爲了讓你使用一個類,它是不同於一個Rails的預期。當你在模型上有一個belongs_to :user
時,Rails會指望指向一個名爲User
的父類。在你的例子中,Rails跳過尋找User
類,而是尋找到Question
模型。
但是,最常見的用法是非默認關聯名稱比默認關聯更有意義。所以更好的例子是當你有一個User
模型和Competition
模型,其中每個競賽有一個用戶作爲勝利者。你可以讓每個Competition
屬於User
,但那不會像表達那樣。相反,你可能想有關係被稱爲winner
:
class User < ActiveRecord::Base
has_many :winners, class_name: "Competition", foreign_key: "competition_id"
end
class Competition < ActiveRecord::Base
belongs_to :winner, class_name: "User", foreign_key: "winner_id"
end
這允許你來指代用戶爲winners
:
competition = Competition.first
competition.winner
這是很多比如果你寫更多的表現competition.user
。
您是否需要在遷移中創建這些外鍵,或者是否足夠在模型中指定它們? –
@JamesLowrey在模型中指定它們只是幫助ActiveRecord進行查找。如果您希望數據庫正確限制外鍵,則還需要將其添加到遷移中。 –