Rails 初级练习 额外作业:根据投票分数排序topics解题思路和方法

第一部分 解题方法
1.方法一:
操作方法:
打开app/controllers/topics_controller.rb

def index
@topics = Topic.all
end
改成
def index
@topics = Topic.all.sort_by{|topic| -topic.votes.count}
end

2.方法二:
操作方法:
打开app/views/topics/index.html.erb


<% @topics.each do |topic| %>
改成

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

第二部分 解题思路
1.解题要点:
1)教材6-4文章应该按照发表时间文倒序排列中,给出的解法是:
打开 app/controllers/groups_controller.rb 的 show

def show
@group = Group.find(params[:id])
end
改成
def show
@group = Group.find(params[:id])
@posts = @group.posts.order("created_at DESC")
end
资料网址:https://fullstack.xinshengdaxue.com/posts/78
1)教材2-1 基础 Ruby中有介绍:


资料网址:https://fullstack.xinshengdaxue.com/posts/34
2)topic.votes.count是按照投票总数从小到大排列,加一个-,就是相反的排序。
3)googlel:sort_by

网址:https://ruby-doc.org/core-2.4.1/Enumerable.html#method-i-sort_by

2.思路详细叙述:
1)首先我是想到了相关教材,确定应该是在app/controllers/topics_controller.rb里面对def index 的内容作出修改,我改了一会,发现越改越错。
2)其次,我开始到论坛里找相关答案,其中找到了一位栈又给出的分享链接:
http://nathanye.logdown.com/posts/1472023-study-notes-09-primary-exercise-3-13-extra-work-implement-points-button-and-the-about-page


找到了解法。
3)最后,又在这位栈又的帮助下,找到了另外一位前辈的文章:http://yammy-blog.logdown.com/posts/1198151
更好地理解了这位前辈的解题思路。
4)在两篇文章的帮助下,我理解了topic.votes.count是按照投票总数从小到大排列,加一个-,就是相反的排序。但发现还不是很理解sort_by,于是就google了一下。

Comments

comments powered by Disqus