我有一个非常糟糕的情况,单表继承的拙劣实现。我想知道的是,"后代"类是否可以破坏其"父"类的关联。我不认为是这种情况,但我想得到确认我是否可以。
以下是有问题的简化模型:
class CertificateName < ApplicationRecord
has_one :ssl_account, through: :certificate_content
end
class Domain < CertificateName
has_one :ssl_account, touch: true
end
这是简化的架构(:
create_table "certificate_names", force: :cascade do |t|
t.integer "certificate_content_id"
t.integer "ssl_account_id"
end
在上面的场景中,继承的Domain
类是与ssl_account
直接关联,还是会通过CertificateName
模型关联?根据我所看到的,我认为在我的情况下,ssl_account
与模型有直接关系,并且不遵循has_one :through
思想?
轨道关联与单个表断开 遗产?
是的。
当您声明具有相同名称的多个关联时,无论在何处声明现有关联,最后评估的关联都将始终破坏现有关联。
关联宏(belongs_to
、has_one
、has_many
、has_and_belongs_to_many
(既生成方法,也生成一个关联反射,它只是保存在类似哈希的结构中,因此传递相同的键(协会的名称(只会破坏它。
class Domain < CertificateName
has_one :ssl_account, touch: true
end
将始终直接联接到ssl_accounts
并期望它具有certificate_name_id
外键列。