我正在使用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
答案 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