在 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
基本上我想更新我的 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