假设我们有10条Post
模型的记录,其中包含DateTime属性updated_at
和created_at
。
我想知道以下哪三种状态是正确的:
一个。自创建以来,所有帖子均未受影响 B.所有职位自创建以来都已更新 C.有些帖子已经更新,有些帖子未被更新
最有效的方法是什么?
答案 0 :(得分:2)
如果您正在寻找快速解决方案,我的建议是额外标记updated:boolean
和after_validate :set_updated_flag
操作
def set_updated_flag
update_attribute :updated, true
end
比您可以以任何方式获取它,例如使用范围
scope :updated, where(:updated=>true)
答案 1 :(得分:1)
如果您无法更新数据库,则可以创建多个范围:
scope :changed, where('updated_at > created_at')
scope :unchanged, where('updated_at = created_at')
# Return +true+ if any Posts changed
def self.changed?
changed.any?
end
# Return +true+ if no Posts changed
def self.unchanged?
!changed?
end
# Return +true+ if all Posts changed
def self.all_changed?
unchanged.empty?
end
请注意,any?
,empty?
和many?
[source]已经过优化,以便在合并到范围时,可以使用count(*)
vs修改实际的sql迭代ruby中的所有元素。在某些情况下,他们可能会回退到红宝石,但通常您会有更高效的查询。