update_attibute / update_attributes跳过回调

时间:2014-09-09 18:09:45

标签: ruby-on-rails activerecord

我想在after_save中使用数组更新字段。

同时执行不同的其他after_saves,忽略此。

我尝试使用update_column,但它没有序列化数组,所以我需要使用update_attribute或update_attributes。

How can I update array to a single field without performing callbacks

1 个答案:

答案 0 :(得分:1)

ActiveRecord::Persistence#update_column(name, value)及其随附的ActiveRecord::Persistence#update_columns(attributes)是您要跳过回调和验证时使用的方法。从班级范围来看,ActiveRecord::Relation#update_all(updates) 或者,您可以使用JSON(而不是序列化数组),如:

class Bar < ActiveRecord::Base
  def foo= array
    write_attribute :foo, array.to_json
  end

  def foo
    JSON.parse(read_attribute :foo)
  end
end

以及其他地方:

Bar.first.update_column :foo, [1,2,3].to_json

至少,当您处理序列化ActiveRecord::Store时,对您来说可能会很有趣。