Действует как Taggable при отображении идентификатора вместо имени

У меня 2 модели, студент и профиль. Студент может иметь только один профиль. Я установил acts_as_taggable_on :skills в профильной модели.

В частичной форме для нового и редактируемого действия профиля у меня есть строка кода для добавления навыков (я использую библиотеку select2 с классом taggable):

# apps/views/profiles/_form.html.erb

<%= f.input :skill_list, input_html: { class: 'taggable', multiple: "multiple" }, collection: Profile.tag_counts_on(:skills) %>

И тогда в контроллере шоу студентов я нахожу студента:

@student = Student.find(params[:id])

В шоу студенческого взгляда я могу иметь такие:

<%= @student.profile.skill_list %>

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

Затем я создал другую учетную запись студента и создал новый профиль для студента. К настоящему времени форма навыков показывает все теги навыков, которые я поместил в предыдущем профиле. Таким образом, я могу выполнить автозаполнение, выбрав доступную метку навыков, а затем нажав "Сохранить"

Однако в представлении студенческого шоу я вижу только список идентификаторов навыков, а не список названий навыков, как ожидалось.

Что я упустил?

1 ответ

Решение

Я прочитал это, как получить список всех тегов, используя гем 'actions-as-taggable-on' в Rails (не в счетчиках), и использую этот код в коллекции (частичная форма):

ActsAsTaggableOn::Tagging.includes(:tag).where(context: 'skills').uniq.pluck(:name)

и это работает. Он сохранит имя, а не идентификатор и может быть доступен для другого профиля.

Другие вопросы по тегам