Есть две таблицы - Rubric и Question. Связь многие ко многим. Стоит задача загрузить данные в базу через seeds.rb. Данные хранятся в xls. В принципе, понятно, как загрузить рубрики - берем все данные из ячеек рубрики, сплитим их по запятой, объединяем и заливаем в базу. Непонятно, как сделать привязку Вопросов к этим созданным рубрикам. Или как-то запрос сделать к базе? Подскажите правильный вариант.
| № вопроса | Заголовок | Вопрос | Рубрика |
|:-----------|------------:|:------------:|:------------:|
| 1 | Заголовок1 | Вопрос1 | наука, политика
| 2 | Заголовок2 | Вопрос2 | журналистика
| 3 | Заголовок3 | Вопрос3 | погода
| 4 | Заголовок4 | Вопрос4 | наука
| 5 | Заголовок5 | Вопрос5 | зима, лето, осень
Ответ
В таблице у вас хранятся названия рубрик через запятую. Массив названий рубрик для каждого вопроса. В модели Question вы можете объявить для этих названий виртуальный атрибут (нужен только сеттер). И в нем по принятому массиву - связывать запись Question с записями Rubric, находя или создавая их по названиям.
Вот пример сеттера в модели Question
class Question < ApplicationRecord
has_many :rubrics, through: :rubrics_questions
has_many :rubrics_questions
def rubric_names=(value)
return if value.blank?
self.rubrics = value.split(', ').map { |name| Rubric.where(name: name).first_or_initialize }
end
end
А в seeds.rb вопросы создаются примерно так:
Question.where(id: id).first_or_create(title: title, text: text, rubric_names: rubric_names)
Комментариев нет:
Отправить комментарий