Rails:如何使最近的博客帖子首先出现

boc*_*son 1 ruby ruby-on-rails rails-activerecord

我正在使用ruby on 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
Run Code Online (Sandbox Code Playgroud)

Roc*_*ice 5

我会在模型中设置一个默认范围,你可以使用,order但我喜欢这样做,因为我通常总是希望应用这个顺序,这样我就不必继续使用了order.把它放在你的模型中,它应该重新排序.

article.rb

# Scopes
default_scope {order(created_at: :desc)}
Run Code Online (Sandbox Code Playgroud)

如果设置了默认范围,则无需进一步操作,文章将默认为该顺序.

如果您不希望它始终默认为该订单,您可以只调用常规范围.

article.rb

scope :recent_first, -> {order(created_at: :desc)}
Run Code Online (Sandbox Code Playgroud)

然后在你将使用的Index操作中

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

如果你真的只需要在这一点上做到这一点order,正如Adam Lassek在下面的评论中提到的那样,也可以.

def index
  @articles = Article.order(created_at: desc).paginate(:page => params[:page], :per_page => 10)
end
Run Code Online (Sandbox Code Playgroud)