它目前列出我最顶层的文章,我想做相反的事情。我想我需要在某处将它命名为created_at,但我还没有让它工作。我知道这很容易,但我还是个新手。感谢
目前我有
<div class="bit-75">
<h2 id="title"><%= link_to article.title, article_path(article) %></h2>
<br>
<ul id="article-links">
<div id="article-image"><%= image_tag article.image_url %></div>
<br>
<li id="article-text"><%= article.text %></li>
<br>
<%= article.created_at %>
<br>
<% if admin_signed_in? %>
<li><%= link_to 'Edit', edit_article_path(article) %></li>
<li><%= link_to 'Destroy', article_path(article),
method: :delete, data: { confirm: 'Are you sure?'} %></li>
<li><%= link_to 'New article', new_article_path %></li>
<% else %>
<li><%= link_to 'Make a Comment', article_path(article) %></li>
</ul>
<% end %>
article.rb
class Article < ActiveRecord::Base
has_many :comments, dependent: :destroy
validates :title, presence: true,
length: { minimum: 5 }
mount_uploader :image, ImageUploader
end
文章控制器
def new
@article = Article.new
end
def index
@article = Article.all
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
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 show
@article = Article.find(params[:id])
end
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to articles_path
end
答案 0 :(得分:2)
在您的文章模型article.rb
中,您可以像这样设置default_scope
:
default_scope -> { order('created_at DESC') }
但是,此方法会在所有页面上对这样的文章进行排序。如果只希望在一个操作上对它们进行排序,比如说def index
,那么这样的事情可能会更好。
@articles = Article.order('created_at DESC')
像@ShamsulHaque一样在评论中说。
以下是关于default scopes的详细阅读。
<强>更新强>
如果您喜欢使用scopes
,就像@rich所说的那样,那么语法将如下所示:
scope :recent, ->(order = 'desc') { order(created_at: order.to_sym) }
您可以选择在控制器中调用asc
或desc
,如下所示:
@articles = Article.recent('asc')
@articles = Article.recent('desc') # although we defaulted to 'desc', so really only need Article.recent
要解释一下,@ rich包括to_sym
将字符串'desc'
或'asc'
转换为:desc
或:asc
之类的符号。如果你没有这样做,你会收到类似
Direction should be :asc or :desc
希望这会有所帮助。
答案 1 :(得分:1)
使用default_scope
是little taboo(可能会导致问题) - 使用条件的标准范围会更好:
#app/models/article.rb
Class Article < ActiveRecord::Base
scope :recent, (order = "desc") -> { where created_at: order.to_sym}
end
这将允许您致电:
@article = Article.recent("asc")
@justin
答案的一个很好的扩展;)