在 Ruby 中使用单个命令更新多条记录

Update Multiple Records with a single command in Ruby

基本上我想更新我的 api 在单个命令中收到的对象数组。我在插入时已经完成了,但是我找不到更新它的方法。 这是用于多次插入的 m 创建方法:

def create_all

    if Attendance.create attendance_params
        render json: { message: "attendance added" }, status: :ok
    else
        render json: { message: "error in creation" }, status: :bad_request
    end
end

参数:

def attendance_params
    params.require(:attendance).map do |p|

        p.permit(
            :student_id,
            :id,
            :attendance
        )
    end
end

我试图对更新做类似的事情,但它产生了这个错误:

   Completed 500 Internal Server Error in 11ms (ActiveRecord: 2.7ms) 
   Argument Error (When assigning attributes, you must pass a hash as an argument.)

我的更新方法是这样的:

def update_attendance
    if Attendance.update attendance_params
        render json: { message: "attendance updated" }, status: :ok
    end
end

ActiveRecord Create 可以采用哈希数组并同时创建多个记录。

但是,ActiveRecord 更新不能。

您可能会在您的模型上创建一个允许散列数组的 "update_batch" 方法。您将必须发送一个散列数组,并且每个散列必须包含您正在更新的记录的 ID(并在您的强参数定义中允许它)。然后在您的 update_batch 方法中,您必须从每个哈希中获取 id 并更新每个:

class Attendance < ActiveRecord
  def update_batch(attendance_records)
    attendance_records.each do |record|
      Attendance.find(record[:id]).update(record.except(:id))
    end
  end
end

请查看此示例并尝试应用它:

Attendance.where(:student_id => [23,45,68,123]).update_all(:attendance => true)

或者,如果您要更新所有出勤记录:

Attendance.update_all(:attendance => true)

此外,请检查此 link: https://apidock.com/rails/ActiveRecord/Relation/update_all