当我尝试将一些数据保存到我的数据库中时,我遇到了一个问题,从CSV文件导入(上传)。
我的环境是关于课堂预订。我的模型预订有以下代码:
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.id并在预订表的数据库中创建行。
好的,但问题是当我用“self.import”方法获取classroom_id并在控制台上打印时,他就存在了。当我使用范围来过滤教室_id时,他是空的。
期待我表达自己的意思。
抱歉我的英文不好:/
修改:当我在create方法中使用时,classroom_id
变为Reservation.create
之前发现nil
。如果我使用row[0]
有效,但我需要使用classroom_id
。
答案 0 :(得分:0)
{ where 'classroom_id = ?', room_id }
应该是
{{1}}
答案 1 :(得分:0)
答案很简单,我忘了在rails c #-> to go to the console
ActiveRecord::Migration.drop_table(:users) #-> to delete users table
exit #-> to exit console
方法之后使用.first
。
pluck方法返回一个包含在数组中的值:
pluck(:id)