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

时间:2017-08-06 16:37:11

标签: ruby-on-rails ruby 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

3 个答案:

答案 0 :(得分:5)

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

article.rb

order

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

如果您不希望它默认为该订单,您可以随时拨打常规范围。

article.rb

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

然后在Index操作中你只需要使用

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

如果你真的只需要在这一个地方def index @articles = Article.recent_first.paginate(:page => params[:page], :per_page => 10) end 进行这项工作,正如亚当拉塞克在下面的评论中提到的那样,也是有效的。

order

答案 1 :(得分: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

答案 2 :(得分:0)

或者你可以这样做。

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