Ruby on Rails 3 を使用して、YouTube の「いいね」と「嫌い」と Digg のスタイルで、Web サイトの投票機能を作成しています。適切なスキームを考え出すのに苦労しています。
ユーザー、トピック、投票の 3 つのモデルがあります。各ユーザーは、1 つのトピックに対して「好き」または「嫌い」の 1 票を投じます。これらのサイトと同様に、ユーザーはトピックに投票できますが、新しいトピックを作成することもできます。ユーザーのすべての投票だけでなく、ユーザーが作成したトピックと投票したトピックの両方を表示できるようにしたいと考えています。私はこれを独自に構築しようとしており、このプロセスを処理するためにデータベースをセットアップする最善の方法を決定しています。
私の最初のアイデアは、:has_many と belongs_to を排他的に使用することでした…</p>
クラス User < ActiveRecord::Base
has_many :votes
has_many :トピック
class Topic < ActiveRecord::Base
has_many :votes
所属先:ユーザー
class Vote < ActiveRecord::Base
所属先:トピック
所属先:ユーザー
boolean choice #ユーザーが好きか嫌いかを追跡します
しかし、これが最善の方法ではない可能性があることが明らかになりました。:has_many :through アソシエーションを使用するのが最善の方法だと思い始めました...
クラス User < ActiveRecord::Base
has_many :votes, :through => :topics
確信はないけど。このようなものを設定する最善の方法についてのアイデアはありますか?