按序列化属性中的第一个键值进行订单收集

时间:2015-10-04 21:24:42

标签: ruby-on-rails ruby-on-rails-4 active-model-serializers

我有一个带有序列化属性的Comment模型:

  serialize :edit, Hash

通过插入键/值对,对注释的每个编辑都加上时间戳:

self.edit[DateTime.current] = edit_content

我如何订购一组评论,所有评论都按照每条评论的第一个提交时间戳排序?

1 个答案:

答案 0 :(得分:1)

你做不到。您的class AddSexToUsers < ActiveRecord::Migration def change add_column :users, :sex, :integer, default: 0 end end class User < ActiveRecord::Base enum sex: [:female, :male] has_secure_password end 列将数据存储为序列化字符串,因此其内容基本上如下所示:

edit

为了使其可以按数据库排序,您需要将编辑内容提取到另一个实体(例如[3] pry(main)> a = {} => {} [4] pry(main)> a[DateTime.current] = 'bla' => "bla" [5] pry(main)> a[DateTime.current] = 'bla bla' => "bla bla" [9] pry(main)> a.to_yaml => "---\n!ruby/object:DateTime 2015-10-04 21:38:02.611020000 Z: bla\n!ruby/object:DateTime 2015-10-04 21:38:06.594140000 Z: bla bla\n" [10] pry(main)> puts a.to_yaml --- !ruby/object:DateTime 2015-10-04 21:38:02.611020000 Z: bla !ruby/object:DateTime 2015-10-04 21:38:06.594140000 Z: bla bla => nil 并创建Revision表),或者,例如,创建一个{{1} }列和你通常一样排序。

P.S。当然,您可以将所有您的revisions表加载到内存中,然后在那里订购,但它会产生巨大的性能影响:

comments.first_edit_date