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

时间:2015-02-01 22:37:27

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

如何指定Rails模型关联的列以用作其foreign_key?默认情况下这是“id”,我想指定另一列。


示例:

question.rb

class Question < ActiveRecord::Base
  has_many :answers
end

answer.rb

class Answer < ActiveRecord::Base
  belongs_to :question
end

“问题”和“答案”表格都不使用 id 列。相反,他们都使用 stack_overflow_id 列作为他们的primary_keys(它们来自StackOverflow API)。


以下是应该能够运行的代码:

my_question = Question.find(stack_overflow_id: 55)
answers = my_question.answers

1 个答案:

答案 0 :(得分:2)

这是两个功能:

  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的第一个/唯一记录)来完成的。请查看这些命令的API,因为它们与find的API。