基本上,我想更新我的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创建可以采用哈希数组并同时创建多个记录。
但是,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
请检查此示例并尝试应用它:
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