2010-01-26 6 views
0

J'ai un post model avec une gemme act-as-taggable-on. Les deux tables ont des horodatages.Corriger cette méthode Rails/ruby ​​pour moi, s'il vous plaît?

J'ai commencé avec

def tags 
    @posts = current_user.posts.find_tagged_with(params[:tag], :order => "@posts.tags.updated_at DESC"]) 
end 

Et quand cela ne fonctionne pas, j'ai essayé de changer les choses et a fini avec ce gâchis.

def tags 
    @posts = current_user.posts.find_tagged_with(params[:tag]) 
    @tags = @posts.tags.all 
    @posts = @tags(params[:tag, :order => "@posts.tags.updated_at DESC"]) 
end 

Je veux fondamentalement trier par quand les étiquettes ont été mises à jour pour la dernière fois.

Bonus: Trier par tag.updated_at ou post.updated_at, mais dans cette application particulière, je vais mettre à jour les tags les plus, donc juste le premier sera bon.

Toute aide est appréciée.

Répondre

1

Vous devez joindre la table tags dans votre déclaration find:

def tags 
    @posts = Post.find_tagged_with(
    params[:tag], 
    :conditions => {:user_id => current_user.id}, 
    :joins => :tags, 
    :order => 'tags.updated_at DESC', 
    :group => 'posts.id' 
) 
end 

Note: Trouver les bonnes conditions pour sélectionner uniquement les messages de l'utilisateur actuel. Cet exemple pourrait fonctionner, cependant.

+0

J'ai bien peur que non. Il trie toujours par Post.updated_at. Je veux trier par Tag.updated_by. Cependant, si les extractions ne sont publiées que depuis current_user. –

+0

Sry j'ai mal compris la question. La version éditée devrait le faire. – mikezter

+0

Hmm ... toujours rien et pire, on voit les mêmes résultats 4 fois. J'ai changé DESC en ASC et toujours le même ordre. J'utilise ce http://github.com/mbleigh/acts-as-taggable-on pour les tags si cela aide. –