2010-09-22 10 views
1

de home_controller.rb:Pourquoi cette vue n'affiche-t-elle pas les messages dans l'ordre décroissant? (Simple question)

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 => '>' %> 

but de Ce point de vue est de montrer le dernier message de chaque balise. L'horodatage updated_at d'un message est mis à jour chaque fois que ce post est commenté.

il est l'affichage des postes avec cette commande:

tag id = 1 
tag id = 2 
tag id = 3 
      ... 

Quelqu'un peut-il me dire pourquoi le code affiche au-dessus des messages dans l'ordre dans lequel leurs balises ont été créés?

Répondre

1

Vous appelez paginer sur un tableau de messages, de sorte que la commande est le même que le tableau de. Si vous ne pouvez pas faire en sorte que le tableau est créé w/les objets classés comme vous le souhaitez, vous pouvez toujours trier avant d'appeler paginate:

@posts = @posts.sort_by(&:updated_at) 
0

Vous devez spécifier l'ordre quelque part:

@posts = Post.all(:order => 'id DESC') 
+0

'@posts = @ posts.paginate: page => params [: page],: per_page => 8,: order => « updated_at DESC'' ne change pas l'ordre. J'ai aussi essayé avec tous les autres '' @ posts' dans la maison # index' – BasicObject

+0

Il ne fonctionnera pas parce que le temps que vous avez paginera vous tous les postes ... vous pourriez peut-être définir dans votre modèle post - > default_scope: order => « id DESC » – jordinl

+0

j'aurais préféré d'utiliser la portée par défaut, mais cela n'a pas fonctionné. La méthode d'avaynshtok a fait cependant. – BasicObject

0

Placez cet extrait de code Index

@posts = Post.all.order('created_at DESC') 

Ça devrait marcher.