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