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
))