2017-07-14 18 views
2

私はモデルItemを持っています。
各アイテムhas_many特性。
A SizeTrait
A ToppingsTrait
A FlavorTrait
など、私はRuby on Railsを、この関係を設定するにはどうすればよいRuby on Rails has_many polymorphic


特性は、多くの異なるものになることができますか?通常のRubyアプリケーションでは、ダックタイピングを使用できますが、これはデータベースに格納する必要があります。

それは多型とbelongs_toの逆のようなものだ:真

私は、彼らがアヒル型インターフェースを共有する一方で、これらの特性として、単一テーブル継承を避けたい、非常に異なる機能を持つことになります。これは、テーブルの未使用のフィールドの多くを引き起こすと、それを行うのは、面倒な、混乱のように思えます。

StackOverflowにはすでにいくつかの記事がありますが、1つは私とは異なる状況で、もう1つはかなりドッジーな解決策があります。

+0

私はなぜこれを行うために単一のテーブルの継承を使用しないのか分かりませんか?あなたの特性が非常に異なる機能になる場合は、それらを異なるモデルで定義する必要があります。あるいは '@ item.traits'に異なるモデルで定義されたメソッドを使用させる方法を尋ねていますか? –

+0

@Donaldすべての特性モデルがテーブルを共有する場合は、未使用のフィールドがたくさんあるため、面倒です。それがこれを行う最善の方法なら、それは私がそれをやる方法ですが、もっと良い方法があると思いました。 – ThaBullfrog

+0

@Donaldあなたのコメントを読んで、明確にしたいと思う:私は絶対に別のモデルでこれらをしたい。可能であれば、これらのモデルを別々のテーブルに入れることを好むだけです。 – ThaBullfrog

答えて

1

多態性結合を介して結合を行うことはできません。最良のアプローチは、以前に述べたように、STIで座っているだけです。あなたは複数のフィールドを持っていると主張するかもしれませんが、魔法使いはヌルになります。少なくとも、レールはあなたの質問を助けるために合理的な結合をすることができます。