我在公司中有一个列,序列化为Array:
class Company
serialize :column_name, Array
end
在 rails控制台中,当我尝试以下操作时:
existing = Company.last.column_name
# it gives a array with single element, say [1]
existing.delete(1)
# now existing is []
Company.last.update_attributes!(column_name: existing)
# It empties the array, so:
Company.last.column_name #gives []
但是,当我在某个控制器的remove
方法中尝试相同的代码时,它永远不会删除最后一个元素。它总是返回[1]。
如何清空序列化列?
注意: - 当我有多个元素时,此逻辑有效,但不适用于最后一个元素。
控制器代码
def remove_restricted_num
company = Company.where(id: params[:id]).first
restricted_numbers = company.restricted_numbers
num = params[:num].to_i
if restricted_numbers.include?(num)
restricted_numbers.delete(num)
company.update_attributes!(restricted_numbers: restricted_numbers)
render js: "alert('#{num} was removed')"
else
render js: "alert('Number not found in the list')"
end
end
答案 0 :(得分:1)
我得到了修复,我们需要使用dup
来获取一个独立变量existing
,否则会引用Company.last.column_name
existing = Company.last.column_name.dup # THIS WORKS!!!
existing.delete(1)
Company.last.update_attributes!(column_name: existing)
根据需要,这会将列更新为[]
。