ruby-on-rails - Rails - ActiveAdmin 和 Papertrail - 一种 DRY 方法

标签 ruby-on-rails activeadmin paper-trail-gem

我有很多使用 PaperTrail 的模型,例如:

class User < ActiveRecord::Base
  has_paper_trail
end

在我的 ActiveAdmin 模型文件中:

ActiveAdmin.register User do

  ...

  # versioning part
  action_item :history, only: :show do
    link_to('History', history_backend_user_path(user), method: :get)
  end

  sidebar :versionate, :partial => "layouts/version", :only => :show

  member_action :history do
    @user = User.find(params[:id])
    @versions = @user.versions.reorder(created_at: :desc)
    render "layouts/history"
  end
end

我必须为每个模型 重复这行,我想知道如何才能把它擦干。

最佳答案

我最终得到了以下解决方案正在运行(另请注意,对User 资源的所有引用都已被概括):

# app/admin-shared/active_admin_loggable.rb

module ActiveAdminLoggable
  def self.extended(base)
    base.instance_eval do
      action_item :history, only: :show do
        link_to('History',
                eval("history_backend_#{resource.class.to_s.downcase}_path(#{resource.class.to_s.downcase})"),
                method: :get
        )
      end

      sidebar :versionate, :partial => "layouts/version", :only => :show

      member_action :history do
        @this_resource = eval("resource.class").find(params[:id])
        @versions = @this_resource.versions.reorder(created_at: :desc)
        render "layouts/history"
      end
    end
  end
end

和:

# app/admin/user.rb
ActiveAdmin.register User do
  extend ActiveAdminLoggable
  ...
end

关于ruby-on-rails - Rails - ActiveAdmin 和 Papertrail - 一种 DRY 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47333426/

相关文章:

ruby-on-rails - 如何通过 URL 更改语言环境?

ruby-on-rails - 如何在不使用身份验证的情况下使用 rails 中的设计获取当前用户!在 Controller 上

ruby-on-rails - Rails 5.1 API + ActiveAdmin + Sidekiq

logging - 浏览器中的 Logstash 日志尾部

ruby-on-rails - Ruby on Rails : Cucumber: how do I Rake a single feature?

ruby-on-rails - 如何出于测试目的禁用缓存清扫器

ruby-on-rails - 无法建立 Postgres SSL 连接

ruby-on-rails - Ruby on Rails - Activeadmin,同一模型的不同验证

ruby-on-rails - Active Record 审计历史

ruby-on-rails-3.2 - Rails 3.2 应用程序 - 我应该使用版本控制 gem(paper_trail 或vestal_versions)还是手动处理它?