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

问题描述 投票:0回答:2

基本上,我想更新我的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
ruby-on-rails ruby ruby-on-rails-5 rails-activerecord
2个回答
0
投票

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

但是,ActiveRecord更新不能。

您可能会在模型上创建“ update_batch”方法,该方法允许使用哈希数组。您将必须发送一个哈希数组,每个哈希都必须包含要更新的记录的ID(并在强参数定义中允许使用该ID)。然后,在update_batch方法中,您必须从每个哈希中获取ID并更新每个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

0
投票

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

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

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

Attendance.update_all(:attendance => true)

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

© www.soinside.com 2019 - 2024. All rights reserved.