2012-01-04 10 views
0

私はABと呼ばれる2つのモデルの間に1対1の関連付けを作成しようとしています。モデルBは、テーブルFooFooが存在する場合)またはテーブルBar(存在する場合)のいずれかに存在できます。Sequelアソシエーションでテーブルを動的に選択する方法を教えてください。

one_to_oneアソシエーションメソッドのフラグ:datasetを使用してみましたが、循環依存性を導入しないで動作させる方法を見つけられませんでした。

Sequelアソシエーションでこれを達成する方法はありますか?または、SQLを手書きするための最善の方法はありますか?

答えて

1

私は、私は完全にあなたがしようとしているものを理解していないが、あなたの説明から、あなただけのテーブルfooが存在するかどうかのBのテーブルを依存させる必要がある必要があります。

class B < Sequel::Model(DB.table_exists?(:Foo) ? :Foo : :Bar); end 

あなたが本当に望んでいた場合モデルBのすべての関連付けのためだけでなく、それを行うには、あなたは関連ブロック内のテーブルから変更することができます。

A.many_to_one(:b){|ds| ds.from(ds.db.table_exists?(:Foo) ? :Foo : :Bar)} 

私はこれらのいずれかをテストしていませんが、彼らは動作するはずです。それがあなたが望むものでないなら、おそらくあなたはあなたの説明にもっと詳細を加えたいと思うでしょう。

関連する問題