Страницы

Поиск по вопросам

понедельник, 26 ноября 2018 г.

Как залить реляционные данные в seeds.rb?

Есть две таблицы - 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)

Комментариев нет:

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