У меня есть одна проблема, когда я пытаюсь сохранить некоторые данные в моей базе данных, импортированные из файла CSV (загруженные).Загрузка файла csv и сохранение в базе данных
Мое окружение - это бронирование в классе. У меня есть следующий код для моей модели Reservation:
class Reservation < ActiveRecord::Base
require 'csv'
belongs_to :classroom
validates :start_date, presence: true
validates :end_date, presence: true
validates :classroom_id, presence: true
validate :validate_room
scope :filter_by_room, ->(room_id) { where 'classroom_id = ?' % room_id }
def self.import(file)
CSV.foreach(file, headers: true) do |row|
room_id = Classroom.where(number: row[0]).pluck(:id)
Reservation.create(classroom_id: room_id, start_date: row[1], end_date: row[2])
end
end
private
def validate_room
if Reservation.filter_by_room(classroom_id).nil?
errors.add(:classroom_id, ' has already booked')
end
end
end
Файл CSV поставляется с этими тремя заголовками: «Номер в классе», «дата начала», «дата окончания». Обратите внимание, что заголовок «classroom number» появился из столбца таблицы классов. Моя задача - получить classroom.id с помощью «числа» и создать строку в базе данных таблицы резервирования.
Хорошо, но проблема в том, что я получаю classroom_id в методе self.import и печатаю на консоли, он существует. Когда я использую область действия для фильтрации classroom_id, он пуст.
Ожидайте, что я выразил себя так, как хочу.
Извините за мой плохой английский:/
Edit: Обнаружено, что classroom_id
перед тем Reservation.create
стать nil
, когда я использую внутри методу создания. Если я использую row[0]
работ, но мне нужно использовать classroom_id
.
проблема остается:/ Если поместить 'помещает room_id' ниже' ROOM_ID = Classroom.where (номер: строка [0]). pluck (: id) ', появится room_id. Но если я помещаю 'puts classroom_id' под' def validate_room', переменная пуста. – gumaro
Я обнаружил, что room_id существует, но когда я помещаюсь в метод «create», он поворачивается на «nil», но если я использую строку [0], работает. К сожалению, строка [0] не является значением, которое я должен использовать. Вы знаете что-то о том, что я могу сделать? – gumaro