1

私が取り組んでいる個人的なプロジェクトに +1/いいね! 機能を追加しようとしています。このためのデータベース設計がどのように見えるか知りたいです。私はいくつかのようなテーブルを持ちたくはありませんが、Web サイト全体ですべてのいいねを処理するために 1 つのようなテーブルを作成します。サイトのさまざまな部分を作成時に、または自由に「プラグイン」できるようにしたいと考えています。

例えば

マイクロポスト - ユーザーはマイクロポストを「いいね」できる必要があります

写真 - ユーザーは写真を「いいね」できる必要があります

ゲーム セクションを作成し、ユーザーがゲームを好きにできるようにしたいとします。ゲームの好きなテーブルを作成する代わりに、既存の好きなテーブルを使用できるようにしたいとします。

心の奥底では、acts_as_tree プラグインは非常に便利だと思っていますが、しばらくすると、好きなテーブルに物を保持することはできますか?

最も賢明なスケーラブルな方法で、いいね! 機能をアプリに追加するにはどうすればよいですか?

4

2 に答える 2

1

ポリモーフィック アソシエーションを見てください。
提供されたリンクの例はコメントについて語っていますが、いいねで同じことが必要だと思います。

class Like < ActiveRecord::Base
  belongs_to :likable, polymorphic: true
end

class Micropost < ActiveRecord::Base
  has_many :likes, as: :likable
end

class Post < ActiveRecord::Base
  has_many :likes, as: :likable
end

ここでは、Post クラスと Micropost クラスの両方にいいね! を付けることができます。また、必要なクラスにいくつかを追加できます。

を使用して、いいね!Like.allごとに関連オブジェクト (投稿またはマイクロ投稿) を取得することもできますlike.likable

于 2012-06-06T14:12:52.673 に答える
1

「Like」モデルか何かが必要です。少なくとも、次の関連付けが必要です。

今、あなたはできる

Like.create :liked_object => micropost, :user => current_user

そして将来的に

Like.create :liked_object => game, :user => current_user

ポリモーフィックな関連付けを検索します (移行には、liked_object_type と like_object_id が必要になる場合があります)

于 2012-06-06T14:17:23.560 に答える