Ruby on rails 使用数组插入更新属性

Ruby on rails 使用数组插入更新属性,ruby-on-rails,ruby,arrays,attributes,ruby-on-rails-4,Ruby On Rails,Ruby,Arrays,Attributes,Ruby On Rails 4,我有一个Impression模型,它带有一个actions属性,该属性被序列化为Array class Impression < ActiveRecord::Base serialize :actions, Array end 类印象

我有一个
Impression
模型,它带有一个
actions
属性,该属性被序列化为
Array

class Impression < ActiveRecord::Base
  serialize :actions, Array
end
类印象
正常属性更新过程:
impression.update(一些属性:“新值”)

正常数组插入过程:

impression.actions否,在使用ActiveRecord序列化功能时,这是不可能的,因为序列化/反序列化必须由ActiveRecord控制,并且
update
对数据库执行直接SQL更新调用

一些非关系数据库(如MongoDB)提供了这一特性,因为它们就是为了实现这一点而设计的。PostgreSQL提供了一个可安装的哈希扩展,允许您对序列化字段执行直接操作

在所有其他情况下,您都可以直接更新字段,但我不鼓励您这样做。写入损坏的数据存在潜在风险

相反,我建议您创建一个同时执行推送和保存的自定义方法。在任何情况下,这都是一个好主意,因为您将在模型外部公开自定义API,而不是将模型耦合到ActiveRecord体系结构

class Impression < ActiveRecord::Base
  serialize :actions, Array

  def add_action(action)
    self.actions << action
    self.save
  end
end

我已经放置了
ruby-on-rails-4
标记,因为
.update
语法与早期版本不同(我想)。我已经恢复了标记取消update
与之前的
update\u attributes
相同,但我同意这里的标签是有意义的。对不起换了。
impression = ...
impression.add_action "new_value"