我希望assign_attribute
表中的各行,然后将它们保存在一个循环中。所以这就是我想要做的事情,
player_arr = []
params[:player_types].each do |index,p_type_params|
if p_type_params[:id]
player_arr << @player_types.find(p_type_params[:id]).assign_attributes(p_type_params)
end
end
稍后我希望在所有更新中以原子方式保存为事务,
ActiveRecord::Base.transaction do
player_arr.each do |p_type|
p_type.save
end
end
但这似乎不起作用,因为p_type似乎是NilClass。我不明白为什么,因为当我做player_arr.length时,我得到一个正数。 此处的目标还是捕获第一个循环中的所有赋值错误,然后进行原子保存。当然,我可以保存在第一个循环中,但它只捕获第一个遇到的错误。任何指针都会非常有用
答案 0 :(得分:1)
问题似乎是你在一行中做得太多了。
player_arr << @player_types.find(p_type_params[:id]).assign_attributes(p_type_params)
您要将assign_attributes
(nil
)的返回值添加到player_arr
数组中。
请改为:
player_arr = []
params[:player_types].each do |index,p_type_params|
if p_type_params[:id]
player = @player_types.find(p_type_params[:id])
player.assign_attributes(p_type_params)
player_arr << player
end
end