Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

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

Совсем недавно рассказывал на страничке форума о способе интеграции тегов 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 на Heroku.

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

 

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

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

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

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

  • Aleksej Интересно отметить: за всю свою жизнь в российском IT у меня не было ни одного проекта - а в пору,…

    Вторник, 19 января 2021

    Опубликовано в: Про IT Selection, gray salary и Барака Обаму
  • Рамат Они до сих пор такую шляпу предлагают с оформлением в известную американскую компанию через ИП или самозанятого, на прошлой неделе…

    Пятница, 15 января 2021

    Опубликовано в: Про IT Selection, gray salary и Барака Обаму
  • serge Да вроде на месте ссылки, Вася. Чем не устраивает сайт разработчика и его github?

    Четверг, 17 декабря 2020

    Опубликовано в: Fakeloader.js
  • Вася А где ссылки на скрипты? или их нет? скачивать нечего?

    Четверг, 17 декабря 2020

    Опубликовано в: Fakeloader.js
  • Aleksej This is a very old project, Lukas. Support has ended.

    Воскресенье, 06 декабря 2020

    Опубликовано в: Category Product Combinations. Prestashop module