【问题标题】:Using Custom Attribute as Foreign Key in Rails [duplicate]在Rails中使用自定义属性作为外键[重复]
【发布时间】:2022-01-19 08:50:07
【问题描述】:

我们有两个模型,QuestionAnswer,它们是关联的:

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


    【解决方案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
    

    外键和主键值可以指定为字符串或符号。

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 2018-09-03
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多