Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails模型中的类\名称外部\键_Ruby_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby Rails模型中的类\名称外部\键

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_名称和:foreign_键的用途是什么

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