Как вывести список тегов, используемых конкретным пользователем, с помощью ActsAsTaggableOn - PullRequest
0 голосов
/ 28 июня 2019

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

В двух словах, у каждого пользователя есть личный профиль для создания базы данных своих личных журналов (здесьЯ использовал devise)

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

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

Мне в основном нужно ActsAsTaggableOn::Tag.most_used, чтобы фильтровать только дляжурналы в профиле пользователя.

Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ - код ниже

Вот моя модель пользователя ...

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :journals, dependent: :destroy
  validates_presence_of :fname, :lname
  acts_as_tagger
end

Вот модель моего журнала ..

class Journal < ApplicationRecord
  belongs_to :user
  validates_presence_of :title, :body
  acts_as_taggable_on :tags
end

На моей странице показа, когда я использую <%= current_user.owned_tags.most_used(3) %> на странице своего профиля пользователя, отображаются следующие данные: #<ActsAsTaggableOn::Tag::ActiveRecord_AssociationRelation:0x00007ffb28123ce0>

1 Ответ

0 голосов
/ 28 июня 2019

Вам необходимо добавить владельца в теги.

class User < ActiveRecord::Base
  acts_as_tagger
end

Обратите внимание, что в этом случае вы больше не можете использовать tag_list, поскольку в нем хранятся только неиспользуемые теги.

current_user.tag(@journal, with: "Cars") # to add owned tag to the journal
@journal.tags_from(current_user) # to fetch journal tags

Теперь вы можете получить наиболее часто используемые теги для пользователя

current_user.owned_tags.most_used(3)

Другой вариант (без права собственности):

ActsAsTaggableOn::Tag.joins(:taggable).where(taggable: current_user.journals)
  .distinct.most_used(3)

В любом случае в результате вы получите отношение ActiveRecord. Чтобы отобразить его в виде, вы должны повторить его.

<% most_used_tags.each do |tag| %>
  <%= tag.name %>
<% end %>

или

<%= most_used_tags.map(&:name).join(', ') %>
...