2011-01-15 3 views
3

Я бы хотел показать список всех тегов для сообщений, упорядочивающих их по наиболее часто используемым.Rails сортировать теги по наиболее часто используемым (tag.posts.count)

Мой контроллер в настоящее время:

@tag_list = Tag.all 

Мое мнение имеет:

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

EDIT отношения заключаются в следующем:

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

Это показывает все теги с их счета. Я пробовал играть с контроллером с помощью Tag.order (..), но, похоже, не получается.

Любая помощь будет высоко оценена.

Спасибо.

ответ

3

Вы можете указать рельсы для автоматического поддержания количества сообщений, которые используют тег, добавив параметр counter_cache в ассоциацию.

На модели Tag:

has_many :posts, :counter_cache => true 

На модели Сообщений:

belongs_to :tag, :counter_cache => true 

Via миграции:

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

В любое время вы добавить запись с этой меткой, то счетчик тегов будет увеличиваться на единицу. Вы можете выполнить ваш заказ легко:

Tags.order('posts_count') 

Более подробную информацию о методах и вариантах ActiveRecord ассоциации могут быть найдены here.

+0

Я не думаю, что будет работать, если Post и Tag находятся в отношениях 'has_and_belongs_to' ..., которые они, вероятно, на самом деле, не так ли? –

+0

Спасибо за отзыв ... Я использую отношения Tag (has_many: posts,: through =>: taggings), Tagging (принадлежит_to: tag и принадлежит_to: post), Post (has_many: tags,: through =>: taggings) – Goldy

+0

@ Andy: Да, я уверен, что has_and_belongs_to_many, что отношения не будут работать с counter_cache. Вместо этого вам нужно будет поддерживать счет вручную через Observer и добавлять функциональные возможности в элементы after_create/after_destroy жизненного цикла модели или устанавливать has_many: через отношения. – Shaun

Смежные вопросы