Категоризация Ruby on Rails с помощью коллекций Simple_Form - PullRequest
0 голосов
/ 25 мая 2018

Является ли то, что я делаю, практичным или есть гораздо более простой способ внедрения этой системы категорий / подкатегорий?

Моя система классификации

У меня естьприложение с таблицей posts, которая будет организована таблицей blog_categories.Эта категоризация имеет основные категории и подкатегории.blog_categories с parent_id как NULL являются основными категориями.ссылка подкатегории на главную через :string с основной :name.

Назначение категории для сообщения

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

<%= f.input :category_id, prompt: "Select Category", collection: [
["No-category"],
["All News","Audio Industry","Game Audio","Film Audio"],
["All Reviews","Software","Hardware"],
["All Interviews","Sound Designers","Game Developers","Voice Talent"],
["All Tutorials","Sound Design","Composition","Implementation","Voice Acting"]
], input_html: { class: "form-control center" } %>

blog_category Modal :

class BlogCategory < ApplicationRecord
  has_many :posts

  # This is called a self referential relation. This is where records in a table may point to other records in the same table.
  has_many :sub_blog_categories, class_name: "Category", foreign_key: :parent_id
end

blog_categories Таблица:

t.string "name"
t.string "parent_id"

Сообщение модальное: belongs_to :blog_category

posts Таблица: t.string "category_id"

  1. Есть ли другой способ добавления в группы / разделители в раскрывающемся списке?

  2. Должен ли я даже использовать этот подход при подборе подкатегорий?

  3. Будет ли это работать даже при использовании основных категорий и подкатегорий?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Я нашел решение назначить category_id на основе BlogCategory.id, выбранного из его :name, используя следующий вход simple_form:

<%= f.input :category_id, collection: BlogCategory.all, label_method: :name, value_method: :id , input_html: { class: "form-control center" } %>

BlogCategory.all вытягивает все категориикоторые были введены в таблицу blog_category.

label_method извлекает :name каждого элемента в таблице blog_category.

value_method присваивает значениевсе варианты выбора в раскрывающемся меню на основе .id соответствующих полей :name из таблицы blog_category.

0 голосов
/ 26 мая 2018

Ознакомьтесь с документацией для simple_form, он может сделать то, что вам нужно: https://github.com/plataformatec/simple_form#collections

f.input :country_id, collection: @continents, as: :grouped_select, group_method: :countries

Это нормальная функциональность, предоставляемая HTML select, так что вы на правильном пути!https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup

В вашем случае, я считаю, что это то, что вы хотите:

f.input :post_id, collection: @categories, as: :grouped_select, group_method: :posts

Поскольку вы собираетесь предоставить список категорий, и у них есть ассоциация "сообщения"Это метод, который вы хотите использовать: @categories.first.posts

...