在Rails中使用自定义属性作为外键[重复]
Posted
技术标签:
【中文标题】在Rails中使用自定义属性作为外键[重复]【英文标题】:Using Custom Attribute as Foreign Key in Rails [duplicate] 【发布时间】: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),但我真的不想这样做。
【问题讨论】:
【参考方案1】:解决方案其实很简单(使用this post):
class Question < ApplicationRecord
has_one :answer, foreign_key: "question_name", primary_key: "name"
end
class Answer < ApplicationRecord
belongs_to :question, foreign_key: "question_name", primary_key: "name"
end
外键和主键值可以指定为字符串或符号。
【讨论】:
以上是关于在Rails中使用自定义属性作为外键[重复]的主要内容,如果未能解决你的问题,请参考以下文章