更改rails中帖子的默认顺序

时间:2015-10-16 20:15:41

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个像rails应用程序的帖子。这些帖子可以按最流行或最新的顺序排列。最受欢迎的是默认订单和主页,我喜欢将其更改为最新订单。由于我还很擅长使用rails,我聘请了程序员来完成大部分工作,但是我知道这是一个非常简单的修复,我只是不知道要改变什么。我认为我需要在post_controller或post模型中改变它,但如果你需要看到别的东西让我知道并且生病了。

post.rb

class Post < ActiveRecord::Base
 include UrlHelp

   def self.highest_voted
  self.order(:cached_votes_down)
 end
end

post_controller.rb

 def index
 @posts = grab_correct_post
 end

def grab_correct_post
  if params[:sort_by] == "added_on"
  @added_on = "sort-active"
  Post.all.order("created_at DESC").paginate(page: params[:page],  per_page: 7)
else
  @most_popular = "sort-active"
  Post.all.order(:cached_votes_score =>:desc).paginate(page: params[:page], per_page: 7)
   end

2 个答案:

答案 0 :(得分:1)

如果您查看选择器以交换排序顺序并获取最常用的sort_by值,那么您可以将grab_correct_post更改为以下内容以更改默认值

def grab_correct_post
  if params[:sort_by] == "<sort_by_value_for popular>"
    @most_popular = "sort-active"
    Post.all.order(:cached_votes_score =>:desc).paginate(page: params[:page], per_page: 7)
  else
    @added_on = "sort-active"
    Post.all.order("created_at DESC").paginate(page: params[:page],  per_page: 7)
  end
end

答案 1 :(得分:1)

看起来您可以在grab_correct_post方法中颠倒if-else块的顺序:

def grab_correct_post
  if params[:sort_by] == "most_popular"
    @most_popular = "sort-active"
    Post.all.order(:cached_votes_score =>:desc).paginate(page: params[:page], per_page: 7)
  else
    @added_on = "sort-active"
    Post.all.order("created_at DESC").paginate(page: params[:page],  per_page: 7)
  end
end

请注意,我只是猜测:sort_by参数值应该按人气排序,因此请务必从"most_popular"更改为实际使用的任何值。