Как подсчитать количество элементов, помеченных тегом act_as_taggable

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

У меня есть три фактоида, каждый из которых помечен элементами в скобках:

  • Factoid One («Красный», «Синий»)
  • Фактоид два («Красный», «Зеленый»)
  • Фактоид номер три («Красный», «Синий», «Розовый»)

То, что я пытаюсь сделать, это распечатать таблицу, которая покажет следующее...

  • Красный: 3
  • Синий: 2
  • Зеленый: 1
  • Розовый: 1

У меня есть это, на мой взгляд, которое дает мне имена тегов, но я не знаю, как подсчитать их появление.

<% @tags.each do |tag| %>
   <%= link_to tag.name, tag_path(tag.name) %>
<% end %>

Мне также удалось написать запрос MySQL, который делает это...

SELECT tags.name, count(tags.id) AS count
FROM `tags`
LEFT OUTER JOIN taggings ON taggings.tag_id = tags.id
GROUP BY tags.id;

Как я могу сделать этот запрос в RoR?

Вот моя схема БД

ActiveRecord::Schema.define(:version => 20140423203020) do

  create_table "factoids", :force => true do |t|
    t.string   "title"
    t.text     "description"
    t.string   "name"
    t.datetime "created_at",  :null => false
    t.datetime "updated_at",  :null => false
  end

  create_table "taggings", :force => true do |t|
    t.integer  "tag_id"
    t.integer  "taggable_id"
    t.string   "taggable_type"
    t.integer  "tagger_id"
    t.string   "tagger_type"
    t.string   "context",       :limit => 128
    t.datetime "created_at"
  end

  create_table "tags", :force => true do |t|
    t.string "name"
  end

  # Foreign Keys and indexes for taggings
   add_index("taggings", ["tag_id"], :name => "index_taggings_on_tag_id")
   add_index("taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context")

end

person Zack    schedule 25.04.2014    source источник
comment
Рассмотрите возможность предоставления правильных DDL (и/или sqlfiddle) ВМЕСТЕ С ЖЕЛАЕМЫМ НАБОРОМ РЕЗУЛЬТАТОВ.   -  person Strawberry    schedule 25.04.2014
comment
Извините, а что такое DDL?   -  person Zack    schedule 25.04.2014


Ответы (1)


Придумал способ сделать это.

<% Factoid.tag_counts.each do |tag| %>
   <tr>
      <td><%= link_to tag.name, tag_path(tag.name) %></td>
      <td><%= tag.count %></td>
   </tr>
<% end %>
person Zack    schedule 25.04.2014