尝试在 Rails 中保存多条记录时出现 ArgumentError
ArgumentError when trying to save multiple records in Rails
我们想要实现的目标
我正在从 Nuxt.js 发送数组,Rails 处于 API 模式,当我尝试逐个检索和保存数组内容时出现错误。
我想保存params接收到的数组,并添加多条记录。
错误
ArgumentError (When assigning attributes, you must pass a hash as an argument, Array passed.):
代码
控制器
def create
schedule = Schedule.new(post_params)
if schedule.save
render json: schedule, status: :created
else
render json: schedule, status: :internal_server_error
end
end
def post_params
params.require(:post).map do |schedule|
schedule.permit(:id, :name, :start, :end, :color, :timed, :long_time, :post_id, :post_item_id)
end
end
参数
post: [,…]
0: {name: "", color: "#2196F3", start: 1648275300000, end: 1648276200000, timed: true, long_time: true}
1: {name: "", color: "#2196F3", start: 1648361700000, end: 1648362600000, timed: true, long_time: true}
2: {name: "", color: "#2196F3", start: 1648448100000, end: 1648449000000, timed: true, long_time: true}
3: {name: "", color: "#2196F3", start: 1648534500000, end: 1648535400000, timed: true, long_time: true}
4: {name: "", color: "#2196F3", start: 1648620900000, end: 1648621800000, timed: true, long_time: true}
我们尝试了什么
・我尝试使用 map 检索值。
・我尝试在 pemit 末尾使用 to_h 将其转换为散列,但值和错误都没有改变。
这里的第一个问题是如果其中一条记录失败会发生什么,应该回滚之前创建的操作并中止后续操作,或者您只是忽略无效的创建。
在 rollback/aborting 的情况下,您可以选择 Schedule.create!(post_params)
- 使用正确的消息错误进行响应,所有其他错误都将回滚。
如果忽略失败的,请选择 Schedule.create!(post_params)
- 以创建的和失败的作为响应。
我们想要实现的目标
我正在从 Nuxt.js 发送数组,Rails 处于 API 模式,当我尝试逐个检索和保存数组内容时出现错误。 我想保存params接收到的数组,并添加多条记录。
错误
ArgumentError (When assigning attributes, you must pass a hash as an argument, Array passed.):
代码
控制器
def create
schedule = Schedule.new(post_params)
if schedule.save
render json: schedule, status: :created
else
render json: schedule, status: :internal_server_error
end
end
def post_params
params.require(:post).map do |schedule|
schedule.permit(:id, :name, :start, :end, :color, :timed, :long_time, :post_id, :post_item_id)
end
end
参数
post: [,…]
0: {name: "", color: "#2196F3", start: 1648275300000, end: 1648276200000, timed: true, long_time: true}
1: {name: "", color: "#2196F3", start: 1648361700000, end: 1648362600000, timed: true, long_time: true}
2: {name: "", color: "#2196F3", start: 1648448100000, end: 1648449000000, timed: true, long_time: true}
3: {name: "", color: "#2196F3", start: 1648534500000, end: 1648535400000, timed: true, long_time: true}
4: {name: "", color: "#2196F3", start: 1648620900000, end: 1648621800000, timed: true, long_time: true}
我们尝试了什么
・我尝试使用 map 检索值。
・我尝试在 pemit 末尾使用 to_h 将其转换为散列,但值和错误都没有改变。
这里的第一个问题是如果其中一条记录失败会发生什么,应该回滚之前创建的操作并中止后续操作,或者您只是忽略无效的创建。
在 rollback/aborting 的情况下,您可以选择 Schedule.create!(post_params)
- 使用正确的消息错误进行响应,所有其他错误都将回滚。
如果忽略失败的,请选择 Schedule.create!(post_params)
- 以创建的和失败的作为响应。