DB设计
所以基本上,我有四张桌子和它们各自的模型。
class A < ApplicationRecord
belongs_to D
has_many B
has_many C through: {
if is_safe -> D
else -> B
}
end
class B < ApplicationRecord
belongs_to A
belongs_to C
end
class C < ApplicationRecord
belongs_to D
has_many B
end
class D < ApplicationRecord
has_many A
has_many C
end
如何编写模型A中提到的has_many C :through
语句,使其取决于is_safe
的值。
您可以有两个has_many(s)
,一个通过D,一个经过B,然后有一个方法来决定返回的关联
class A < ApplicationRecord
belongs_to D
has_many B
has_many C_D, through: D, class_name: "C"
has_many C_B, through: B, class_name: "C"
def Cs
if is_safe
C_D
else
C_B
end
end
end