我最近遇到过这段代码。用户有很多答案。 :class_name和:foreign_key的目的是什么?
class Answer < ApplicationRecord
belongs_to :user, :class_name => 'Question", :foreign_key => 'question_id'
end
答案 0 :(得分:2)
这里的命名有点奇怪,但: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
更具表现力。