保存一组ActiveRecords对象

时间:2016-06-19 23:13:11

标签: ruby-on-rails arrays ruby activerecord rails-activerecord

我正在尝试在我的控制器中保存一组ActiveRecords,但是出现了这个错误:

  

<Array:...>

的未定义方法'保存'

我有这种模型方法:

def self.import(file)
  reservations = []
  CSV.foreach(file, headers: true ) do |row|
    room_id = Classroom.where(code: row[0]).pluck(:id).first
    row[0] = room_id
    reservations << Reservation.new(number_of_guests: row[1], check_in_date: row[2], check_out_date: row[3], room_id: row[0])
  end
  reservations
end

我有以下控制器:

def create_import
  @reservations = Reservation.import(params[:file].path)
  respond_to do |format|
    if @reservations.save
      format.html { redirect_to @reservation, notice: 'Reservations was successfully created.' }
      format.json { render :show, status: :created, location: @reservation }
    else
      format.html { render :import }
      format.json { render json: @reservations.errors, status: :unprocessable_entity }
    end
  end
end

我该怎么做这个保存方法?我希望在我的视图中显示有错误的报告。

1 个答案:

答案 0 :(得分:2)

好吧,你应该在每个方法上调用save方法:

@reservations.each(&:save)

或者安装一些提供多个insert功能的第三方gem。您还应该重写if语句,因为上面的表达式将始终返回集合本身,因此评估为true