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进行查找。如果您希望数据库正确限制外键,则还需要将其添加到迁移中。 –