Ruby Rails模型中的类\名称外部\键
我最近遇到了这个代码。用户有很多答案。:class_名称和:foreign_键的用途是什么Ruby Rails模型中的类\名称外部\键,ruby,ruby-on-rails-4,activerecord,Ruby,Ruby On Rails 4,Activerecord,我最近遇到了这个代码。用户有很多答案。:class_名称和:foreign_键的用途是什么 class Answer < ApplicationRecord belongs_to :user, :class_name => 'Question", :foreign_key => 'question_id' end 这里的命名有点奇怪,但是:class_name的目的是允许您使用与Rails期望的不同的类。当您在一个模型上有一个belishto:user时,Rails会
class Answer < ApplicationRecord
belongs_to :user, :class_name => 'Question", :foreign_key => 'question_id'
end
这里的命名有点奇怪,但是:class_name的目的是允许您使用与Rails期望的不同的类。当您在一个模型上有一个belishto:user时,Rails会期望它指向一个名为user的父类。在您的示例中,Rails跳过查找用户类,而是查找问题模型 不过,最常见的用法是当非默认关联名称比默认名称更有意义时。因此,一个更合适的例子是,当您有一个用户模型和竞争模型,其中每个竞争都有一个用户作为赢家。你可以让每一场比赛都属于一个用户,但这并没有表现力那么强。相反,您可能希望将关系称为赢家:
这比编写competition.user要表达得多。您需要在迁移中创建这些外键,还是在模型中指定它们就足够了?@JamesLowrey在模型中指定它们只会帮助ActiveRecord进行查找。如果希望DB正确约束外键,还需要将其添加到迁移中。
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
competition = Competition.first
competition.winner