#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)
Комментариев нет:
Отправить комментарий