Railsを使用して掲示板のWebサイトを作成しています。Topic
クラスとクラスがありPost
ます。
2つのクラス(content、title、user_id ..)の類似性に気付くのは簡単です。
このシナリオでのRailsのベストプラクティスは何ですか?Topic
から継承する必要がありPost
ますか?それはどのように機能しますか?
Railsを使用して掲示板のWebサイトを作成しています。Topic
クラスとクラスがありPost
ます。
2つのクラス(content、title、user_id ..)の類似性に気付くのは簡単です。
このシナリオでのRailsのベストプラクティスは何ですか?Topic
から継承する必要がありPost
ますか?それはどのように機能しますか?
ほとんどの場合、それは異なります。これらが非常に類似したテーブル構造および/または重複するメソッドを持っている場合、私はSTIを使用します。ただし、クラスに異なる外部キーがある場合、私は通常このアプローチを使用しません。
一方、これらにいくつかの共通の特徴があるが、それら自体のクラスが十分に異なる場合は、共通のコードをモジュール(基本的にはミックスイン)に抽出します。より柔軟性が必要な場合は、懸念事項を使用するか、一般的なパターンを宝石に抽出することもできます。
単一テーブル継承(STI)を検討することをお勧めします。これにより、複数のモデルで同じデータベーステーブルを共有し、type
列で区別することができます。
クイック検索で見つけたトピックに関するいくつかの記事:
モジュールミックスイン:このモジュールを任意のクラスに含めるだけです
継承(STI):これらのクラスには同じテーブルを使用する必要があります
多態性:クラスごとに異なるテーブルを使用する必要があります
私の意見では、それは実際には状況に依存するため、一般的にベストプラクティスに答えるのは本当に難しいです-場合によっては、組み合わせを使用したい場合もあります、神は禁じられています。
シンプルで柔軟性があるので、モジュールミックスインを使い続けます。2つの別々のテーブルがあるためにクエリを何度も作成すると思われる場合は、継承(STI)を試してください。経験から、間違いなくPolymorphicは頭痛の種になる可能性があり、慣れていない場合は多くの落とし穴があるため、2つのクラスではおそらく価値がありません。
# Heres one way to set up Inheritance (STI) on a table called 'contents'
class Content < ActiveRecord::Base
attr_accessible :content, :title
belongs_to :user
end
class Topic < Content
end
class Post < Content
end
Content.all # => query topics and posts
#Post.all + Topic.all # => query topics and posts without STI (doublewriting query)
Post.all # => only query posts
Topic.all # => only topics
General Railsのベストプラクティス? シンプルなStupidを維持する_ _