Сразу хотелось бы подчеркнуть, в моем случае использование acts-as-taggable-on далеко не исчерпывало весь заложенный автором джема функционал. Нет, относительно тегирования задачи у меня были самые скромные: теги создаются в Active Admin при создании же статьи либо на вкладке Tags (там могут быть и удалены/отредактированы в дальнейшем), и отображаются на фронте блога, на страничке материала в нижней его части вкупе с цифрой, характеризующей количество статей, отмеченных данным тегом. Каждый тег кликабелен, клик отображает страничку тега с также кликабельным перечнем заголовков статей.
Чтоб не быть голословным - живая демка, ну а полностью код приложения доступен в гитхабе, rails-app называется CRUD-Blog. Пожалуй, в качестве вступления этого было достаточно, и теперь переходим к практике. Итак:
How to display a tag cloud from acts-as-taggable-on in Ruby on Rails
Показываем теги в статьях:
posts_controller
def show
@post = Post.find(params[:id])
end
app/views/posts/show.html.erb
<% @post.tag_list.each do |tag| %>
<%= tags(tag) %>
<% end %>
helper
def tags(tag)
link_to (tag.to_s +
' (' +
Post.tagged_with(tag).count.to_s +
')'),
tag_url(tag),
class: 'badge badge-secondary'
end
Формируем страничку тега с перечнем статей:
tags_controller.rb
def show
@posts = Post.tagged_with(params[:id])
end
app/views/tags/show.html.erb
<% @posts.each do |i| %>
<%= link_to i.title, {controller: "posts", action: "show", id: i.id} %>
<% end %>
Не забываем про маршруты. Например, как-то так:
routes.rb
resources :posts do
resources :comments
end
resources :tags, only: [:show]
Комментарии в блоге