私は多くの異なるモデル (20 近く) を持っており、いくつかの共通の属性を共有していますが、他のモデルではある程度異なっています。STIは一見魅力的に見えますが、急速な製品開発により、さまざまなモデルが時間の経過とともにどのように進化するかはわかりません。
私たちのアプリケーションとよく似ているのは、Yelp です。Rails で Yelp はどのように何かを管理しますか? すべての投稿には、「住所」などの共通の属性があります。それでも、それらは他のものとはかなり異なります。たとえば、レストランには予約オプションがあり、他のレストランには予約オプションがない場合があります。レストランには、「アルコール可」など、他のレストランには当てはまらない属性がたくさんあります。STIでこれを行うと、すぐに手に負えなくなります。
それで、次善の選択肢は何ですか?PostgresでHStore?私は HStore を小さなこと以外に使用することに慣れていません。HStore は、いくつかの問題を解決する一方で、データ型の欠如、参照整合性チェックの欠如などの問題をもたらします。構築する基盤として、強固なリレーショナル データベースが必要です。したがって、Yelp の場合、おそらく、レストランのモデルが私が目指すところです。私はここのような提案を見てきました - http://mediumexposure.com/multiple-table-inheritance-active-record/、しかし、私は非常に一般的な何かを得るために多くのモンキーパッチを行うことに満足していません.
それで、他にどのような選択肢が存在するのか(もしあれば)、それともただ弾丸を噛んで歯を磨いて、それらの共通の属性を20のモデルにコピーする必要があるのでしょうか? 私の問題は、コード自体ではなく、移行ファイルに起因すると考えています。たとえば、テーブルをループしてそれらの属性をテーブルに設定するように移行をセットアップした場合、異なるモデルを使用することで問題の範囲を軽減できたでしょうか?
別のモデルで将来的に多くの問題を引き起こす可能性のある重要な何かを見落としていますか?