2011-01-15 2 views
3

Ich möchte eine Liste aller Post-Tags anzeigen, die sie am häufigsten verwendeten.Schienen sortieren Tags nach den meisten verwendeten (tag.posts.count)

Mein Controller verfügt derzeit über:

@tag_list = Tag.all 

Meine Ansicht hat:

<% @tag_list.each do |tag| %> 
    <%= tag.name %>(<%= tag.posts.count %>) 
<% end %> 

EDIT die Beziehungen sind wie folgt:

Tag (has_many :posts, :through => :taggings) 
Tagging(belongs_to :tag and belongs_to :post) 
Post(has_many :tags, :through => :taggings) 

Dies zeigt alle Tags mit ihrer Zählung. Ich habe versucht, mit dem Controller mit Tag.order (..) zu spielen, aber kann nicht gut kommen.

Jede Hilfe würde sehr geschätzt werden.

Danke.

Antwort

3

Sie können Schienen anweisen, die Anzahl der Posts, die ein Tag verwenden, automatisch zu verwalten, indem Sie der Verbindung die Option counter_cache hinzufügen.

Auf Ihrem Tag Modell:

has_many :posts, :counter_cache => true 

Auf Ihren Beiträge Modell:

belongs_to :tag, :counter_cache => true 

über eine Migration:

add_column :tags, :posts_count, :integer, :null => false, :default => 0 

Jedes Mal, fügen Sie einen Beitrag mit diesem Tag, die Der Tag-Zähler wird um eins erhöht. Sie können Ihre Bestellung führen Sie dann leicht nach:

Tags.order('posts_count') 

Mehr Informationen über Activeassoziationsmethoden und Optionen können here finden.

+0

Ich glaube nicht, wird funktionieren, wenn Post und Tag in einer 'has_and_belongs_to'-Beziehung sind ... die sie wahrscheinlich in Wirklichkeit sind, oder? –

+0

Danke für die Rückmeldung ... Ich verwende die Beziehung Tag (has_many: Beiträge,: through =>: Markierungen), Tagging (gehört zu: Tag und gehört zu: Post), Post (has_many: Tags,: through =>: Markierungen) – Goldy

+0

@Andy: Ja, ich bin mir ziemlich sicher, dass eine has_and_belongs_to_many Beziehung mit counter_cache nicht funktioniert. Stattdessen müssten Sie die Zählung entweder manuell über einen Observer verwalten und den After_create/after_destroy-Teilen des Lebenszyklus der Modelle oder der Einrichtung von has_many: through-Beziehungen Funktionalität hinzufügen. – Shaun