Rails has_one 有多个列 - has_many 和 has_one 问题

Rails has_one with multiple columns - has_many and has_one issue

正在尝试针对此问题提出 has_one 关联。我有两个表:

Ca:
  :id
  :serial
  ...
Cert:
  :id
  :ca_id
  :serial
  ...

给定的 cas.id 有很多证书,但一个 cas(:ca_id, :serial) 只有一个证书。我不需要 has_many 关联,但需要 has_one 以便我可以使用 ca.cert 引用 CA 的证书。我需要 has_one 来创建类似于以下查询的内容:

SELECT * 来自证书,其中 ca_id = {ca.id} AND serial = {ca.serial}

进一步说明 CA 和证书之间的关联 -

为什么要这样建模?好吧,证书就是证书。无论证书标识的是 CA 还是最终用户,其含义结构和特征都是相似的。

似乎 has_one 是直截了当的,但我尝试了各种使用范围的方法,但都无济于事。

当然,我可以并且已经在 cas 模型中创建了一个 'cert()' 方法,但似乎应该可以建立关联。

可以定义一个has_one,范围为:

class Ca < ActiveRecord::Base
  has_many :certs
  has_one :cert, ->{ joins(:ca).where('cas.serial = certs.serial')}
end

class Cert < ActiveRecord::Base
  belongs_to :ca
end

现在

Ca.first.cert

给出具有匹配序列号的证书。
但是它比定义更优雅还是更Rails:

class Ca < ActiveRecord::Base
  has_many :certs
  def cert
    certs.where(serial: serial)
  end
end