【发布时间】:2016-10-25 08:37:39
【问题描述】:
这是表结构
create_table :audits, :force => true do |t|
t.column :audited_changes, :text
end
class Audit < ::ActiveRecord::Base
serialize :audited_changes, Hash
end
这是来自 gem Audited gem 的一堆代码,我需要在其中查询作为序列化哈希存储的文本字段 audited_changes。
找到了一个参考,我们可以在其中查询文本Searching serialized data, using active record 中的序列化数组,我是否有任何类似于查询而不是循环大量记录的选项?
这就是我从 audited_changes 中取出我需要的记录的方式
fields = ['name', 'description']
audit_data = audit_data.select do |obj|
obj.define_singleton_method(:audited_changes_filtered) do
obj.audited_changes.select {|k,v| fields.map(&:to_s).include?(k) }
end
obj if fields_present?(obj, fields)
end
【问题讨论】:
-
一定要使用
serialize吗?这是一个可怕的 hack,在数据库中解析 YAML 将是一团糟。 -
Ya @muistooshort 这是一个 gem 概念,我现在无法更改,因为数据库已经有超过 5 万条记录
标签: ruby-on-rails postgresql ruby-on-rails-4 acts-as-audited