home_controller.rb:
class HomeController < ApplicationController
def index
@title = "tags"
@posts = Post.tag_counts.collect do |tag|
Post.tagged_with(tag).first
end
@posts.flatten.uniq
@posts = @posts.paginate :page => params[:page], :per_page => 8
end
end
index.html.erb:
<%- for post in @posts -%>
<%- post.tags.each do |t| -%>
<%= link_to t.name, tag_path(t) %>
<%- end -%>
<%= link_to post.title, post %>
<%- if post.comments.empty? -%>
<% else %>
<%= link_to pluralize(post.comments.count, 'reply'), :controller => 'posts', :action => 'show', :id => post %>
<%- end -%>
<%= timeago(post.updated_at) %>
<%- end -%>
<%= will_paginate @posts, :previous_label => '<', :next_label => '>' %>
此视图的目的是显示每个标记的最新帖子。每次评论该帖子时,都会更新帖子的updated_at时间戳。
它正在显示具有此排序的帖子:
tag id = 1
tag id = 2
tag id = 3
...
有谁可以告诉我为什么上面的代码按照标签的创建顺序显示帖子?
答案 0 :(得分:1)
你在一组帖子上调用paginate,所以排序与数组相同。如果你不能确保创建数组w /对象按照你想要的方式排序,你可以在调用paginate之前总是对它进行排序:
@posts = @posts.sort_by(&:updated_at)
答案 1 :(得分:0)
您应该在某处指定订单:
@posts = Post.all(:order => 'id DESC')
答案 2 :(得分:0)
将此代码段放在Index
中@posts = Post.all.order('created_at DESC')
它应该有用。