我有很多使用 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/