Rails сортирует теги по наиболее часто используемым (tag.posts.count) - PullRequest
4 голосов
/ 15 января 2011

Я хотел бы показать список всех тегов записей, упорядочив их по наиболее часто используемым.

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

@tag_list = Tag.all

На мой взгляд:

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

РЕДАКТИРОВАТЬ отношения следующим образом:

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

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

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

Спасибо.

1 Ответ

4 голосов
/ 15 января 2011

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

На вашей модели тега:

has_many :posts, :counter_cache => true

На ваших сообщениях модель:

belongs_to :tag, :counter_cache => true

Через миграцию:

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

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

Tags.order('posts_count')

Более подробную информацию о методах и опциях ActiveRecord Association можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...