だから私はソーシャルブックマーク風のセットアップをここに持っています。4 つのテーブル: 投稿、ユーザー、コメント、および投票。ホームページは単に投稿モデルのインデックス ページを指し、Post.all
配列に対してループを実行し、いくつかの基本的な情報を表示します: title
, upvotes
- downvotes
(私は ti を投稿の「スコア」と呼びます)。
今、私がする必要があるのは、モデルでこれらの投稿を (私は推測していますが) 相対的な作成時間 (ページの読み込みからこの投稿が作成されてから何秒か?) で割ったスコアで順序付けすることです。Railscreated_at
では、投稿オブジェクトに列が表示され、次のような投票の表があります。
投稿モデル
class Post < ActiveRecord::Base
attr_accessible :id, :title, :url, :user_id, :comment_count, :agreement
has_many :votes
has_many :comments
belongs_to :user
end
投票モデル
class Vote < ActiveRecord::Base
attr_accessible :direction, :post_id, :vote_type, :user_id
belongs_to :user
belongs_to :post
belongs_to :comment
end
post モデルの ID は、vote モデルの post_id に対応します。
:direction
ブール値です。0
賛成票と反対票に1
関連付けられています。Post_ID は、投票が行われた投稿の ID です。
ホームページでの位置が作成時間と賛成票と反対票の両方によって決定されるように、投稿をどのように並べ替える必要がありますか?
def index
@posts = Post.join(:votes).order(<???>)
end
ETA: @shweta は正しい軌道に乗っており、投稿と投票のテーブルに参加しています。ただし、彼の回答の選択部分は機能しません。