【问题标题】:Activity history with Rails audited gem使用 Rails 审核的 gem 的活动历史记录
【发布时间】:2012-06-15 05:47:14
【问题描述】:

我有带有某些模型的 rails 3 应用程序,例如 Product 和 User。我正在使用“已审核”gem 来跟踪产品的更改,它既简单又好用。

但是我想制作一个特殊的页面,我想在其中放置日常活动历史记录。第一步我需要 Audits.all.order("created_at") 之类的东西,但没有这样的模型。

问题:我怎样才能获得今天所有模型的所有审核?

【问题讨论】:

    标签: ruby-on-rails android-activity history audit


    【解决方案1】:

    我认为您应该根据gem structure查询Audited::Adapters::ActiveRecord::Audit.where("created_at >= ?", Date.today)

    【讨论】:

    • 可简写为:Audited.audit_class.where("created_at >= ?", Date.today)
    【解决方案2】:

    我的解决方案只是扩展审计对象,例如

    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)
    

    【讨论】:

    • 有人可以帮我看看这些观点吗?我不知道如何在我的观点中表现出来。我正在使用带有最新 activerecord 审核 gem 的 rails 3.2.6。
    【解决方案3】:

    为了能够通过以下方式访问今天的审核:

    @audits = Audit.today
    

    app/models/ 中创建一个audit.rb 文件,例如:

    Audit = Audited.audit_class
    
    class Audit
      scope :today, -> do
        where("created_at >= ?", Time.zone.today.midnight).reorder(:created_at)
      end
    end
    

    Audited also provides a few named scopes of its own 可能有用:

    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) }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      相关资源
      最近更新 更多