Gun*_*ter 2 ruby activerecord ruby-on-rails-4
我最近遇到了这段代码。用户有很多答案。:class_name 和 :foreign_key 的目的是什么?
class Answer < ApplicationRecord
belongs_to :user, :class_name => 'Question", :foreign_key => 'question_id'
end
Run Code Online (Sandbox Code Playgroud)
小智 7
这里的命名有点奇怪,但目的:class_name是允许您使用与 Rails 期望的不同的类。当模型上有 时belongs_to :user,Rails 会期望它指向名为 的父类User。在您的示例中,Rails 跳过查找User类,而是查找Question模型。
不过,最常见的用法是非默认关联名称比默认关联名称更有意义。因此,一个更合适的例子是,当您有一个User模型和Competition模型时,每个竞赛都有一个用户作为获胜者。您可以让每个都Competition属于 a 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
Run Code Online (Sandbox Code Playgroud)
这允许您将用户称为winners:
competition = Competition.first
competition.winner
Run Code Online (Sandbox Code Playgroud)
这比你写的更具表现力competition.user。
| 归档时间: |
|
| 查看次数: |
3578 次 |
| 最近记录: |