2017-08-06 9 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使用することができますが、これは、私は通常、常に順序が適用されることを望むので、私はそれをしたい方法です。この方法I orderを引き続き使用する必要はありません。これをあなたのモデルに入れ、それを並べ替えるべきです。デフォルトのスコープ付き

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

article.rbはそれ以上のアクションは、記事がその順序がデフォルトになります必要はありませんし。

いつもの順番でデフォルトにしたくない場合は、通常のスコープを呼ぶだけです。

article.rb

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

とアダムLassekがに言及して、あなたが本当に唯一、この一点orderでこれを実行する必要がある場合は、インデックスアクションであなただけの

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

を使用します彼のコメントは、同様に動作します。

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

私は 'default_scope'について多くの人よりもハードライナーではありませんが、これは私がその使用をお勧めする状況ではありません。 'order(created_at:desc)'を単に追加するのは、それほど大きな問題ではないのに対し、このデフォルトの順序はそれに対して呼び出されるすべての 'order'スコープに追加されるので、混乱の可能性は高いです。 –

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 
関連する問題