製品やユーザーなど、いくつかのモデルを備えた Rails 3 アプリケーションがあります。私は製品の変更を追跡するために「監査済み」の宝石を使用しています。これはシンプルでうまく機能しています。
でも、毎日の活動履歴を載せたい特設ページを作りたい。最初のステップで Audits.all.order("created_at") のようなものが必要ですが、そのようなモデルはありません。
質問: すべてのモデルについて、今日のすべての監査を取得するにはどうすればよいですか?
製品やユーザーなど、いくつかのモデルを備えた Rails 3 アプリケーションがあります。私は製品の変更を追跡するために「監査済み」の宝石を使用しています。これはシンプルでうまく機能しています。
でも、毎日の活動履歴を載せたい特設ページを作りたい。最初のステップで Audits.all.order("created_at") のようなものが必要ですが、そのようなモデルはありません。
質問: すべてのモデルについて、今日のすべての監査を取得するにはどうすればよいですか?
gem の構造Audited::Adapters::ActiveRecord::Audit.where("created_at >= ?", Date.today)
に合わせてクエリを実行する必要があると思います
私の解決策は、単純に監査オブジェクトを拡張することです。
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)