Rails 使用非 id 列进行模型关联

Rails use a non-id column for model associations

如何为 Rails 模型关联指定一个列作为它的 foreign_key?这是默认的"id",我想指定另一列。


示例:

question.rb

class Question < ActiveRecord::Base
  has_many :answers
end

answer.rb

class Answer < ActiveRecord::Base
  belongs_to :question
end

"questions" 和 "answers" table 都不使用 id 列。相反,他们都使用 stack_overflow_id 列作为他们的 primary_keys(他们来自 Whosebug API)。


这是应该能够 运行:

的代码
my_question = Question.find(stack_overflow_id: 55)
answers = my_question.answers

这是两个功能:

  1. 正在覆盖关联的外键。这是通过关联的 foreign_key 参数完成的:belongs_to :question, foreign_key: "stack_overflow_id"。这将允许您执行 instance.association 并取回正确的记录。
  2. 通过参数查找记录,而不是自动创建的 ID 字段。这是使用 Model.where(stack_overflow_id: 55)(对于多个记录)或使用 find_by(stack_overflow_id: 55)(对于具有该 ID 的 first/only 记录)完成的。检查这些命令的 APIs,因为它们与 find.
  3. 的 API 不匹配