我正在尝试在两个模型之间创建一对一的关联,称为A
和B
。模型B
可以存在于 table Foo
(如果Foo
存在)或 table 中Bar
,所有其他情况。
我尝试使用:dataset
one_to_one 关联方法的标志来使其工作,但似乎无法弄清楚如何在不引入循环依赖的情况下使其工作。
有没有办法通过 Sequel 关联来实现这一点?还是手写 SQL 的最佳做法?
我不确定我是否完全理解您正在尝试做什么,但根据您的描述,您应该只需要根据表 Foo 是否存在来制作 B 的表:
class B < Sequel::Model(DB.table_exists?(:Foo) ? :Foo : :Bar); end
如果您真的只想为关联而不是为所有模型 B 这样做,您可以修改关联块中的 FROM 表:
A.many_to_one(:b){|ds| ds.from(ds.db.table_exists?(:Foo) ? :Foo : :Bar)}
我还没有测试过这些,但它们应该可以工作。如果这不是您想要的,您可能希望在描述中添加更多细节。