为什么此视图不按降序显示帖子? (简单的问题)

时间:2010-09-22 19:29:49

标签: ruby-on-rails uiview ruby-on-rails-3 controller

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
          ...

有谁可以告诉我为什么上面的代码按照标签的创建顺序显示帖子?

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')

它应该有用。