Rails: вставьте связанный column_id путем поиска другого столбца при импорте из файла CSV

Я рассмотрел некоторые проблемы здесь, в Stackru, и не нашел свой случай (который я считаю странным, потому что моя цель кажется достаточно общей).

У меня есть две модели: Products а также Categories которые связаны следующим образом:

  • товар belongs_to :category
  • категория has_many :products

Товар имеет колонку category_id

Файл CVS имеет следующие столбцы:

  • наименование товара,
  • category_name,
  • цена продукта

Как на земле я могу взять category_name из файла и вставьте category_id в таблицу продуктов?

У меня есть следующий код из Rails-Casts:

  def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
      Response.create! row.to_hash
    end
  end

Спасибо!

1 ответ

Решение

Не все должно быть сделано в одну строку. Вы можете сделать что-то подобное для каждой строки CSV:

category_name = row['category_name']
category = Category.find_by_name(category_name) unless category_name.blank?

Product.create({
  name: row['product_name'],
  price: row['product_price'],
  category: category
))
Другие вопросы по тегам