Страницы

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

вторник, 24 декабря 2019 г.

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

#ruby_on_rails #ruby


Есть две таблицы - Rubric и Question. Связь многие ко многим. Стоит задача загрузить
данные в базу через seeds.rb. Данные хранятся в xls. В принципе, понятно, как загрузить
рубрики - берем все данные из ячеек рубрики, сплитим их по запятой, объединяем и заливаем
в базу. Непонятно, как сделать привязку Вопросов к этим созданным рубрикам. Или как-то
запрос сделать к базе? Подскажите правильный вариант.

|  № вопроса |   Заголовок |    Вопрос    |  Рубрика     |
|:-----------|------------:|:------------:|:------------:|
| 1          |  Заголовок1 |    Вопрос1   | наука, политика     
| 2          |  Заголовок2 |    Вопрос2   | журналистика   
| 3          |  Заголовок3 |    Вопрос3   | погода     
| 4          |  Заголовок4 |    Вопрос4   | наука      
| 5          |  Заголовок5 |    Вопрос5   | зима, лето, осень   

    


Ответы

Ответ 1



В таблице у вас хранятся названия рубрик через запятую. Массив названий рубрик для каждого вопроса. В модели 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)

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

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