我有带有某些模型的 rails 3 应用程序,例如 Product 和 User。我正在使用“经过审核”的 gem 来跟踪产品的变化,它既简单又好用。
但是我想制作一个特殊的页面,我想在其中放置日常活动历史记录。第一步我需要 Audits.all.order("created_at") 之类的东西,但没有这样的模型。
问题:我怎样才能获得今天所有型号的所有审核?
我有带有某些模型的 rails 3 应用程序,例如 Product 和 User。我正在使用“经过审核”的 gem 来跟踪产品的变化,它既简单又好用。
但是我想制作一个特殊的页面,我想在其中放置日常活动历史记录。第一步我需要 Audits.all.order("created_at") 之类的东西,但没有这样的模型。
问题:我怎样才能获得今天所有型号的所有审核?
我认为您应该Audited::Adapters::ActiveRecord::Audit.where("created_at >= ?", Date.today)
根据gem结构进行查询
为了能够通过以下方式访问今天的审计:
@audits = Audit.today
像这样创建一个audit.rb
文件app/models/
:
Audit = Audited.audit_class
class Audit
scope :today, -> do
where("created_at >= ?", Time.zone.today.midnight).reorder(:created_at)
end
end
Audited 还提供了一些自己的命名范围,这些范围可能被证明是有用的:
scope :descending, ->{ reorder("version DESC") }
scope :creates, ->{ where({:action => 'create'}) }
scope :updates, ->{ where({:action => 'update'}) }
scope :destroys, ->{ where({:action => 'destroy'}) }
scope :up_until, ->(date_or_time){ where("created_at <= ?", date_or_time) }
scope :from_version, ->(version){ where(['version >= ?', version]) }
scope :to_version, ->(version){ where(['version <= ?', version]) }
scope :auditable_finder, ->(auditable_id, auditable_type){ where(auditable_id: auditable_id, auditable_type: auditable_type) }
我的解决方案只是扩展审计对象,例如
cat lib/audit_extensions.rb
# The audit class is part of audited plugin
# we reopen here to add search functionality
require 'audited'
module AuditExtentions
def self.included(base)
base.send :include, InstanceMethods
base.class_eval do
belongs_to :search_users, :class_name => 'User', :foreign_key => :user_id
scoped_search :on => :username, :complete_value => true
scoped_search :on => :audited_changes, :rename => 'changes'
scoped_search :on => :created_at, :complete_value => true, :rename => :time, :default_order => :desc
scoped_search :on => :action, :complete_value => { :create => 'create', :update => 'update', :delete => 'destroy' }
before_save :ensure_username
end
end
module InstanceMethods
private
def ensure_username
self.username ||= User.current.to_s rescue ""
end
end
end
Audit = Audited.audit_class
Audit.send(:include, AuditExtentions)