質問

私は<のhref =「http://chadfowler.com/2009/4/1/20-rails-development-no-no-s」のrel = "nofollowをnoreferrerについてチャドファウラーのブログ投稿を読んできた

「> 20 Railsの開発ノー号を。単一テーブル継承に彼はコメントします:

  

クラス名を保持している「タイプ」という列の記憶が怪しい何かが起こっていることはかなり良い指標です。それは魚が、常に悪くはありません。私はそれが適切なソリューションだ場合は、それを使用するすべての時間はあなたが複数回自問しなければならないこと、しかし、だと思います。データベースを使用すると、STIとポリモーフィック団体の多くを持っているとき、彼らは同様にベストを尽くす何をしません。

私は、ブログアプリケーションを書いていると私はポストの上に、彼らは私に連絡して取得したい場合は、訪問者が投稿することができ、コンタクトメッセージに対して行うことができ、コメントのためにSTIを使用して検討しています。マイMessageモデルは私のCommentモデルから継承します。そのMessageは余分なsubjectフィールドを持つことになります以外彼らの両方が、共通の属性を共有します。もう一つの共通点は、両方とも、スパムチェックのためにAkismetのに提出されるということです。

チャドが示唆するように、それは適切なソリューションだ場合は、

単に複数回自問するのではなく、私は、同様のスタックオーバーフローの専門家からいくつかの意見を取得したいと思いました!私はSTIのために良いフィットのような音を提案してる何していますか?

役に立ちましたか?

解決

私は、STIを何度も使用してきました。ページ、NewsItemの、BlogItemなどを持っている可能性があるCMSを考えてみます。

彼らは順番にActiveRecordの継承から、共通のクラスから派生した各可能性があります。それぞれのテーブルには、同じ(タイトル、本文、タグ、published_at)になりますが、それぞれが自分のクラスにカスタムコードを持っているように、各モデルには異なる団体、または別のステータス、または別のワークフローを持っているかもしれません。しかし、それらはすべて共通テーブルと親クラスを共有しています。また、私は自動的にキャストを入力し、クロスクラスの検索を行うには、親クラスを使用すると、レコードの結果の配列を持つことができます。

その他これに対処する方法とそうでないかもしれない最良の例がありますが、STIは、オブジェクトの挙動が異なる場合があります状況に便利ですが、状態は同じである持続時が確かにあります。もちろん、これは将来的にも真であることを確認する必要があります。

あなたのケースでは、コメントと接触メッセージが異なります。同じテーブルでそれらを持つことで何のメリットがありませんように聞こえます。たぶん/ libにモジュールでまだ親クラスで共有コードを配置したり、より良います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top