0

私は自分のケースを提示し、STIソリューションを使用する必要があるかどうかを知りたいです。
私は掲示板 Web サイトを作成していますが、これまでのところ、ユーザー、トピック、投稿などのモデルがいくつかあります。
明確にするために、投稿はトピックのコメントのようなものです。トピックにはタイトルとコンテンツがあります。投稿にはコンテンツしかありません。

これで、ユーザーは投稿またはトピックを好き/嫌いにするオプションを利用できるようになりました。次の 3 つのオプションを考えました。

  1. トピックと投稿にはつながりがありません (各モデルには「num_of_likes」、「num_of_dislikes」があります)
  2. トピックは投稿を継承します。
  3. Topic と Post は、たとえば LikeableObj と呼ばれる Base Model から継承します。

これら 3 つのオプションのうち、私のニーズに最も適しているのはどれですか?
私が考えていなかった4番目のオプションはありますか? 将来、 Like
できる 3 番目のモデルを作成したい場合はどうすればよいですか?

4

1 に答える 1

1

ユーザーが特定の投稿またはトピックを気に入ったかどうかを追跡したいと思うので、ユーザーを投稿またはトピックのいずれかに接続する、いいね! の結合モデルを作成します。

class Like < ActiveRecord::Base
  belongs_to :user
  belongs_to :liked_obj, polymorphic:true, counter_cache:true
end

like_obj は多態的であるため、投稿またはトピックにすることができます。次にhas_many :likes、これらのモデルと列を配置できますlikes_count。これは、カウンター キャッシュとして自動的に更新されます。

Post と Topic に共通するいいねを処理するコードがある場合は、それを a に入れmodule Likeable、両方のクラスに含めます。

于 2012-12-14T16:06:45.627 に答える