2017-08-06 64 views
1

我正在使用Ruby on Rails創建一個博客應用程序。我能夠允許用戶添加帖子,但是在頁面的頂部,首先創建的帖子首先出現。我希望最近的博客文章首先出現。我該怎麼做呢?讓我知道我需要在這裏添加哪些代碼文件。Rails:如何使最近的博客文章第一次出現

我的文章控制器

class ArticlesController < ApplicationController 
    def new 
     @article = Article.new 
    end 

    def index 
     @articles = Article.paginate(:page => params[:page], :per_page => 10) 
    end 

    def show 
     @article = Article.find(params[:id]) 
    end 

    def create 
     @article = Article.new(article_params) 

     @article.save 
     redirect_to @article 
    end 

    def edit 
     @article = Article.find(params[:id]) 
    end 

    def update 
     @article = Article.find(params[:id]) 
     if @article.update(article_params) 
      redirect_to @article 
     else 
      render 'edit' 
     end 

    end 

    def destroy 
     @article = Article.find(params[:id]) 
     @article.destroy 

     redirect_to articles_path 
    end 
end 

private 
def article_params 
    params.require(:article).permit(:title, :text, :datee) 
end 
+0

作爲@Rockwell Rice建議。默認情況下,它們將按升序列出,除非您通過更改範圍來指定。 – Belder

回答

5

我會設置一個默認的範圍在模型中,你可以只使用order,但是這是我喜歡這樣做,因爲我通常總是希望該應用秩序,這種方式我不必繼續使用order。把它放在你的模型中,它應該對它們進行重新排序。

article.rb

# Scopes 
default_scope {order(created_at: :desc)} 

有了一個默認的範圍設定,不需要採取進一步的行動文章將默認的順序。

如果您不希望它默認爲該訂單所有的時間您可以只是定期調用範圍。

article.rb

scope :recent_first, -> {order(created_at: :desc)} 

,然後在索引操作,你只想用

def index 
    @articles = Article.recent_first.paginate(:page => params[:page], :per_page => 10) 
end 

如果你真的只需要做到這一點在這一個點order,正如亞當拉塞克中提到他的評論如下,運作良好。

def index 
    @articles = Article.order(created_at: desc).paginate(:page => params[:page], :per_page => 10) 
end 
+0

雖然我對'default_scope'的描述不是很多,但我不推薦使用它。混淆的可能性很高,因爲這個默認的順序將被添加到每個被調用的「訂單」範圍上,而簡單地添加'order(created_at:desc)'在這裏並不是什麼大事。 –

2

添加新的範圍爲Article型號:

class Article < ApplicationRecord  
    scope :ordered, -> { order(created_at: :desc) } 
end 

使用範圍控制器:

def index 
    @articles = Article.ordered.paginate(:page => params[:page], :per_page => 10) 
end 
0

或者你可以簡單地做到這一點。

def index 
    @articles = Article.order('created_at desc').paginate(:page => params[:page], :per_page => 10) 
end 
相關問題