私はPost
、、Reply
およびVote
モデル(多形)を持っています:
create_table "posts", :force => true do |t|
t.text "content", :limit => 255
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "title"
t.integer "replies_count", :default => 0, :null => false
t.integer "category_id"
end
create_table "replies", :force => true do |t|
t.text "content"
t.integer "post_id"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "votes", :force => true do |t|
t.integer "votable_id"
t.string "votable_type"
t.integer "user_id"
t.integer "polarity"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
投稿と返信が必要だったtotal_votes
ので、インスタンスメソッドを作成しました。
post.rbおよびreply.rb:
def total_votes
self.votes.map {|v| v.polarity }.sum
end
だから私はそれを使って投稿や返信を並べ替えることができます:
ホームページ:
default_order = "created_at DESC"
params[:order_by] ||= default_order
@feed_items = @post.replies.paginate(page: params[:page],
per_page: 10).order(params[:order_by])
だから今、私はorder_by
ビューの後に何を追加するのかよくわかりません:
<span><%= link_to 'total_votes DESC', root_path(order_by: HERE) %></span>
試しましたが、うまく&:total_votes DESC
いきtotal_votes DESC
ませんでした。
これを行う正しい方法は何ですか?(とテーブルのtotal_votes
両方に列を追加する必要は少しないと思いましたが、それがパフォーマンスに優れているかどうかはわかりませんか?)posts
replies