【发布时间】:2022-01-19 08:50:07
【问题描述】:
我们有两个模型,Question 和 Answer,它们是关联的:
class Question < ApplicationRecord
has_one :answer
end
class Answer < ApplicationRecord
belongs_to: question
end
在默认设置下,answers 表包含用于此关系的question_id 列。这个专栏有问题的自动枚举(question.id),但是在迁移一些旧数据集时给我们带来了一些挑战。
每个问题都有一个额外的唯一标识符name,它是一个字符串:
<Question id: 355, name: "ABC123", question_type: ...>
我们希望将此属性用作此关联的键。也就是说,answers 表应该包含一个question_name 列,该列将保存相关值。我们已经成功地设置了自定义列名并正确定义了外键,但它总是寻找question_id 值而不是名称。使用上面的示例,它将查找外键为355 而不是"ABC123" 的行。
有没有办法在不改变question 的主键的情况下设置这个东西(如here 解释的那样)?我显然可以覆盖默认的关联方法(question.answer、answer.question),但我真的不想这样做。
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-6