Пятница, 04 декабря 2020 00:11

How to display a tag cloud from acts-as-taggable-on in Ruby on Rails

Оцените материал
(0 голосов)

Совсем недавно рассказывал на страничке форума о способе интеграции тегов acts-as-taggable-on с Active Admin; если интересует такого рода тематика - велкам к материалу Integrate acts-as-taggable-on with Active Admin. Здесь же короткой строкой о том, как отобразить теги во вьюхах блога, работающем на основе веб-фреймворка Ruby on Rails (тестировал на RoR 6.0.3.4).

 

How to display a tag cloud from acts-as-taggable-on in Ruby on Rails
How to display a tag cloud from acts-as-taggable-on in Ruby on Rails

 

Сразу хотелось бы подчеркнуть, в моем случае использование acts-as-taggable-on далеко не исчерпывало весь заложенный автором джема функционал. Нет, относительно тегирования задачи у меня были самые скромные: теги создаются в Active Admin при создании же статьи либо на вкладке Tags (там могут быть и удалены/отредактированы в дальнейшем), и отображаются на фронте блога, на страничке материала в нижней его части вкупе с цифрой, характеризующей количество статей, отмеченных данным тегом. Каждый тег кликабелен, клик отображает страничку тега с также кликабельным перечнем заголовков статей.

 

Blog on Rails. Live Demo.

Увидеть на гитхабе.

 

Чтоб не быть голословным - живая демка, ну а полностью код приложения доступен в гитхабе, 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]

Последнее изменениеСреда, 13 января 2021 17:47

Оставить комментарий

Добавьте ваш комментарий

Text To Speech

Комментарии в блоге