我有一个带有序列化属性的Comment模型:
serialize :edit, Hash
通过插入键/值对,对注释的每个编辑都加上时间戳:
self.edit[DateTime.current] = edit_content
我如何订购一组评论,所有评论都按照每条评论的第一个提交时间戳排序?
答案 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