Rails模型中的class_name foreign_key
我最近遇到过这段代码。 用户有很多答案。 :class_name和:foreign_key的目的是什么?
class Answer '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
更具表现competition.user
。