一千萬個為什麽

搜索

如何在獲取模型集合時進行排序?

我調用了我的posts_controller.rb索引操作:

@articles = Article.order("id desc")

我現在希望能夠通過以下方式訂購:

date
id
some_counter_attribute

我的查詢字符串將具有sort = date/id/count,如:

www.example.com/articles/?sort=date

我現在應該如何在我的控制器中實現它?我應該只使用if語句嗎?

if params[:sort] == "date"
  @articles = Article.order("created_at desc")
elsif params[:sort] == "count"
  @articles = ...
..

或者,還有更好的方法? 這個邏輯應該理想地在控制器或模型中嗎?

最佳答案

嘗試這個:

class ArticlesController

  def index
    @articles = Article.order(sort_order)
  end        

private

  def sort_order
    @@sort_order ||= { 
      "date" => "created_at DESC",
      "id"   => "id DESC",
      "comments" => "comment_count ASC"
    }
    @@sort_order[params[:sort]]
  end

end

當然,有些寶石可以做這類事情:

MetaSearch

SearchLogic

轉載註明原文: 如何在獲取模型集合時進行排序?