如何使序列化列空?

时间:2017-07-04 15:19:05

标签: ruby-on-rails ruby ruby-on-rails-4

我在公司中有一个列,序列化为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

1 个答案:

答案 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)

根据需要,这会将列更新为[]