保华的Rails学习笔记

按照投票数进行排序

根据投票分数排序 topics

1、在终端运行

rails generate migration add_vote_count_to_topic

运行后,就会在db/migrate下边产生一个日期_add_vote_count_to_topic文件
然后修改这个文件,修改后为:

class AddVoteCountToTopic < ActiveRecord::Migration[5.0]
  def change
    add_column :topics, :count, :integer
  end
end

2、在终端运行

rake db:migrate

3、加入@topic.update_attributes(count: @topic.votes.count)更新投票數

在文件controllers/topic_controller.rb中找到upvote(加分)的代码

def upvote
  @topic=Topic.find(params[:id])
  @topic.votes.create
  redirect_to(topics_path)
end

修改为

def upvote
  @topic=Topic.find(params[:id])
  @topic.votes.create
  @topic.update_attributes(count: @topic.votes.count)
  redirect_to(topics_path)
end

4、使用使用.order进行排序

controllers/topic_controller.rb中找到index部分

def index
    @topics = Topic.all
  end

修改为:

def index
    @topics = Topic.all.order('count desc')
  end





或者用第二种方法,这个方法,只用在index.html.erb中改一句就可以了

<% @topics.sort_by {|topic| topic.votes.count}.reverse.each do |topic| %>