Giter Club home page Giter Club logo

rails_admin_history_rollback's Introduction

Rails Admin History Rollback

Gem Version Code Climate

RailsAdmin extension for enabling users to easily visualise and revert their history audit created by the PaperTrail gem.

Installation

To enable rails_admin_history_rollback, add the following to your Gemfile ensuring it is added after rails_admin:

gem 'rails_admin'
gem 'rails_admin_history_rollback'

It should go without saying that this plugin also requires the paper_trail gem.

E.g. gem 'paper_trail'

Configuration

Simply enable paper_trail on your model --with-changes --with-associations and set up as usual by following the paper_trail instructions.

rails generate paper_trail:install --with-changes --with-associations

In the rails_admin.rb initializer, uncomment the following lines to enable auditing:

history_index
history_show

Notes

You may also need to require "paper_trail" in application.rb

As pointed out in issue #8, paper_trail master branch and release v5.0.0 (when available) causes session issues. Login is reset by devise; paper_trail tries to access to the current_user variable before devise (airblade/paper_trail#556).

The fix is to manually add set_paper_trail_whodunnit before_action as advised here: (https://github.com/airblade/paper_trail#finding-out-who-was-responsible-for-a-change)

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  [...]
  before_action :set_paper_trail_whodunnit
  [...]
end

Screenshots

History view

Modal view

About Jemcode

Jemcode

This repository is maintained and funded by Jemcode Limited. We are available for hire.

rails_admin_history_rollback's People

Contributors

codealchemy avatar crimsonglory avatar ivanzotov avatar kayakyakr avatar mauriciomoraes avatar olleolleolle avatar rikkipitt avatar robertgauld avatar serge1peshcoff avatar tomregelink avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

rails_admin_history_rollback's Issues

paper_trail restore relations

Thanks for this great module!

The newest paper_trail makes it possible to restore relations (has_one and has_many),
but you need to supply the options ":has_many => true, :has_one => true" to the method
"reify" to make this possible:

https://github.com/airblade/paper_trail#associations

This to ensure backward compatibility, and not to confuse/enrage simple users.

Would it be interesting to add an extra button to restore also these associations?
For example "rollback (including assocations)"

Crashes when reverting a model linked to not existing child model

Related: paper-trail-gem/paper_trail#841

How to reproduce:

  1. I have Stadium and StadiumUser models, and the dependency between them is like that:
class StadiumUser < User
    ....
    has_one :stadium, foreign_key: "user_id", dependent: :destroy, required: true
    after_create :make_stadium
end
  1. I created the StadiumUser (Stadium is created with it)
  2. I deleted StadiumUser via rails_admin
  3. I find the Stadium deletion entry and press "Restore"
  4. this error appears
PG::ForeignKeyViolation at /stadium/history
ERROR:  insert or update on table "stadiums" violates foreign key constraint "fk_rails_b1bd5d1cc5"
DETAIL:  Key (user_id)=(56) is not present in table "users". 

Missing partial kaminari/ra-twitter-bootstrap/_paginator

Faced this issue when using the history feature in rails admin

Showing /Users/samuelphua/.rvm/gems/ruby-2.1.5/gems/rails_admin_history_rollback-0.0.8/app/views/rails_admin/main/history.html.haml where line #56 raised:

Missing partial kaminari/ra-twitter-bootstrap/_paginator with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder, :haml]}.

Using kaminari 0.17.0
Using paper_trail 5.2.0
Using rails 4.2.6
Using rails_admin 0.8.1
Using rails_admin_history_rollback 0.0.8

Compatibility Issue with rails_admin 3.0.0.rc2

Hello!

I filed an issue in the rails_admin gem, but I get a RouteNotFound error when I try to initialize rail_admin with the rails_admin_history_rollback gem.

railsadminteam/rails_admin#3474

I can view the admin dashboard when I take out rails_admin_history_rollback gem-related code.

config.actions do
    history_index do
      only PAPER_TRAIL_AUDIT_MODELS
    end
    history_show do
      only PAPER_TRAIL_AUDIT_MODELS
    end
  end

Here is a stripped-down version of my routes.rb.
I also just grabbed the latest commit 50d34c9d1c888d2cfce6ea5bcc3e9fd25022ed57.

I still get the route error.

Gemfile

gem 'rails', '~> 7.0', '>= 7.0.2.2'
gem 'rails_admin', github: 'railsadminteam/rails_admin', ref: '50d34c9d1c888d2cfce6ea5bcc3e9fd25022ed57'
gem 'rails_admin_history_rollback', '~> 1.0', '>= 1.0.3'
gem 'rails_admin_import', '~> 3.0'

config/routes.rb

# frozen_string_literal: true

require 'sidekiq/web'
require 'sidekiq/cron/web'

Rails.application.routes.draw do
  mount StripeEvent::Engine, at: '/stripe/webhooks'
  devise_for :admins
  devise_for :users, controllers: {
    registrations: 'users/registrations',
    confirmations: 'users/confirmations',
    passwords: 'users/passwords',
    sessions: 'users/sessions',
    invitations: 'users/invitations',
    omniauth_callbacks: 'oauth'
  }
  mount RailsAdmin::Engine => '/admin', as: 'rails_admin'

  authenticate :admin do
    mount Sidekiq::Web => '/sidekiq'
  end

  match '/404', to: 'errors#not_found', via: :all
  match '/500', to: 'errors#internal_server_error', via: :all

  get '/signout' => 'oauth#destroy', :as => :signout
  get '/signin' => 'oauth#new', :as => :signin
end

config/initializers/rails_admin.rb

PAPER_TRAIL_AUDIT_MODELS = [
  'SponsorshipPackageProduct',
  'SponsorshipPackage',
  'SponsorshipProduct',
  'SubscriptionCustomerSource',
  'SubscriptionCustomer',
  'SubscriptionInvoice',
  'SubscriptionPrice',
  'Subscription',
].freeze


RailsAdmin.config do |config|
  ### Popular gems integration

  ## == Devise ==
  config.authenticate_with do
    warden.authenticate! scope: :admin
  end

  config.current_user_method(&:current_admin)

  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app
    import
    ## With an audit adapter, you can add:
    # history_index
    # history_show
  end

  config.configure_with(:import) do |config|
    config.logging = true
  end

  config.actions do
    history_index do
      only PAPER_TRAIL_AUDIT_MODELS
    end
    history_show do
      only PAPER_TRAIL_AUDIT_MODELS
    end
  end

  PAPER_TRAIL_AUDIT_MODELS.each do |model|
    config.audit_with :paper_trail, model, 'PaperTrail::Version'
  end
end
rails routes output
Prefix Verb     URI Pattern                                                                                       Controller#Action
                            stripe_event          /stripe/webhooks                                                                                  StripeEvent::Engine
                       new_admin_session GET      /admins/sign_in(.:format)                                                                         devise/sessions#new
                           admin_session POST     /admins/sign_in(.:format)                                                                         devise/sessions#create
                   destroy_admin_session DELETE   /admins/sign_out(.:format)                                                                        devise/sessions#destroy
                      new_admin_password GET      /admins/password/new(.:format)                                                                    devise/passwords#new
                     edit_admin_password GET      /admins/password/edit(.:format)                                                                   devise/passwords#edit
                          admin_password PATCH    /admins/password(.:format)                                                                        devise/passwords#update
                                         PUT      /admins/password(.:format)                                                                        devise/passwords#update
                                         POST     /admins/password(.:format)                                                                        devise/passwords#create
                        new_user_session GET      /users/sign_in(.:format)                                                                          users/sessions#new
                            user_session POST     /users/sign_in(.:format)                                                                          users/sessions#create
                    destroy_user_session DELETE   /users/sign_out(.:format)                                                                         users/sessions#destroy
        user_facebook_omniauth_authorize GET|POST /users/auth/facebook(.:format)                                                                    oauth#passthru
         user_facebook_omniauth_callback GET|POST /users/auth/facebook/callback(.:format)                                                           oauth#facebook
                       new_user_password GET      /users/password/new(.:format)                                                                     users/passwords#new
                      edit_user_password GET      /users/password/edit(.:format)                                                                    users/passwords#edit
                           user_password PATCH    /users/password(.:format)                                                                         users/passwords#update
                                         PUT      /users/password(.:format)                                                                         users/passwords#update
                                         POST     /users/password(.:format)                                                                         users/passwords#create
                cancel_user_registration GET      /users/cancel(.:format)                                                                           users/registrations#cancel
                   new_user_registration GET      /users/sign_up(.:format)                                                                          users/registrations#new
                  edit_user_registration GET      /users/edit(.:format)                                                                             users/registrations#edit
                       user_registration PATCH    /users(.:format)                                                                                  users/registrations#update
                                         PUT      /users(.:format)                                                                                  users/registrations#update
                                         DELETE   /users(.:format)                                                                                  users/registrations#destroy
                                         POST     /users(.:format)                                                                                  users/registrations#create
                   new_user_confirmation GET      /users/confirmation/new(.:format)                                                                 users/confirmations#new
                       user_confirmation GET      /users/confirmation(.:format)                                                                     users/confirmations#show
                                         POST     /users/confirmation(.:format)                                                                     users/confirmations#create
                  accept_user_invitation GET      /users/invitation/accept(.:format)                                                                users/invitations#edit
                  remove_user_invitation GET      /users/invitation/remove(.:format)                                                                users/invitations#destroy
                     new_user_invitation GET      /users/invitation/new(.:format)                                                                   users/invitations#new
                         user_invitation PATCH    /users/invitation(.:format)                                                                       users/invitations#update
                                         PUT      /users/invitation(.:format)                                                                       users/invitations#update
                                         POST     /users/invitation(.:format)                                                                       users/invitations#create
                             rails_admin          /admin                                                                                            RailsAdmin::Engine
                             sidekiq_web          /sidekiq                                                                                          Sidekiq::Web
                                                  /404(.:format)                                                                                    errors#not_found
                                                  /500(.:format)                                                                                    errors#internal_server_error
                                 signout GET      /signout(.:format)                                                                                oauth#destroy
                                  signin GET      /signin(.:format)                                                                                 oauth#new
        turbo_recede_historical_location GET      /recede_historical_location(.:format)                                                             turbo/native/navigation#recede
        turbo_resume_historical_location GET      /resume_historical_location(.:format)                                                             turbo/native/navigation#resume
       turbo_refresh_historical_location GET      /refresh_historical_location(.:format)                                                            turbo/native/navigation#refresh
                                    home GET      /home(.:format)                                                                                   redirect(301, /)
                                    root GET      /                                                                                                 high_voltage/pages#show {:id=>"home"}
           rails_postmark_inbound_emails POST     /rails/action_mailbox/postmark/inbound_emails(.:format)                                           action_mailbox/ingresses/postmark/inbound_emails#create
              rails_relay_inbound_emails POST     /rails/action_mailbox/relay/inbound_emails(.:format)                                              action_mailbox/ingresses/relay/inbound_emails#create
           rails_sendgrid_inbound_emails POST     /rails/action_mailbox/sendgrid/inbound_emails(.:format)                                           action_mailbox/ingresses/sendgrid/inbound_emails#create
     rails_mandrill_inbound_health_check GET      /rails/action_mailbox/mandrill/inbound_emails(.:format)                                           action_mailbox/ingresses/mandrill/inbound_emails#health_check
           rails_mandrill_inbound_emails POST     /rails/action_mailbox/mandrill/inbound_emails(.:format)                                           action_mailbox/ingresses/mandrill/inbound_emails#create
            rails_mailgun_inbound_emails POST     /rails/action_mailbox/mailgun/inbound_emails/mime(.:format)                                       action_mailbox/ingresses/mailgun/inbound_emails#create
          rails_conductor_inbound_emails GET      /rails/conductor/action_mailbox/inbound_emails(.:format)                                          rails/conductor/action_mailbox/inbound_emails#index
                                         POST     /rails/conductor/action_mailbox/inbound_emails(.:format)                                          rails/conductor/action_mailbox/inbound_emails#create
       new_rails_conductor_inbound_email GET      /rails/conductor/action_mailbox/inbound_emails/new(.:format)                                      rails/conductor/action_mailbox/inbound_emails#new
      edit_rails_conductor_inbound_email GET      /rails/conductor/action_mailbox/inbound_emails/:id/edit(.:format)                                 rails/conductor/action_mailbox/inbound_emails#edit
           rails_conductor_inbound_email GET      /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                                      rails/conductor/action_mailbox/inbound_emails#show
                                         PATCH    /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                                      rails/conductor/action_mailbox/inbound_emails#update
                                         PUT      /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                                      rails/conductor/action_mailbox/inbound_emails#update
                                         DELETE   /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                                      rails/conductor/action_mailbox/inbound_emails#destroy
new_rails_conductor_inbound_email_source GET      /rails/conductor/action_mailbox/inbound_emails/sources/new(.:format)                              rails/conductor/action_mailbox/inbound_emails/sources#new
   rails_conductor_inbound_email_sources POST     /rails/conductor/action_mailbox/inbound_emails/sources(.:format)                                  rails/conductor/action_mailbox/inbound_emails/sources#create
   rails_conductor_inbound_email_reroute POST     /rails/conductor/action_mailbox/:inbound_email_id/reroute(.:format)                               rails/conductor/action_mailbox/reroutes#create
rails_conductor_inbound_email_incinerate POST     /rails/conductor/action_mailbox/:inbound_email_id/incinerate(.:format)                            rails/conductor/action_mailbox/incinerates#create
                      rails_service_blob GET      /rails/active_storage/blobs/redirect/:signed_id/*filename(.:format)                               active_storage/blobs/redirect#show
                rails_service_blob_proxy GET      /rails/active_storage/blobs/proxy/:signed_id/*filename(.:format)                                  active_storage/blobs/proxy#show
                                         GET      /rails/active_storage/blobs/:signed_id/*filename(.:format)                                        active_storage/blobs/redirect#show
               rails_blob_representation GET      /rails/active_storage/representations/redirect/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations/redirect#show
         rails_blob_representation_proxy GET      /rails/active_storage/representations/proxy/:signed_blob_id/:variation_key/*filename(.:format)    active_storage/representations/proxy#show
                                         GET      /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format)          active_storage/representations/redirect#show
                      rails_disk_service GET      /rails/active_storage/disk/:encoded_key/*filename(.:format)                                       active_storage/disk#show
               update_rails_disk_service PUT      /rails/active_storage/disk/:encoded_token(.:format)                                               active_storage/disk#update
                    rails_direct_uploads POST     /rails/active_storage/direct_uploads(.:format)                                                    active_storage/direct_uploads#create

Routes for StripeEvent::Engine:
  root POST /           stripe_event/webhook#event

Routes for RailsAdmin::Engine:
history_index GET|PUT /:model_name/history(.:format)     rails_admin/main#history_index
  bulk_action POST    /:model_name/bulk_action(.:format) rails_admin/main#bulk_action
 history_show GET     /:model_name/:id/history(.:format) rails_admin/main#history_show
Fullstack Trace
[actionpack (7.0.2.2) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'](http://localhost:3000/admin#)
[web-console (4.2.0) lib/web_console/middleware.rb:132:in `call_app'](http://localhost:3000/admin#)
[web-console (4.2.0) lib/web_console/middleware.rb:28:in `block in call'](http://localhost:3000/admin#)
[web-console (4.2.0) lib/web_console/middleware.rb:17:in `catch'](http://localhost:3000/admin#)
[web-console (4.2.0) lib/web_console/middleware.rb:17:in `call'](http://localhost:3000/admin#)
[sentry-ruby-core (5.1.0) lib/sentry/rack/capture_exceptions.rb:25:in `block in call'](http://localhost:3000/admin#)
[sentry-ruby-core (5.1.0) lib/sentry/hub.rb:58:in `with_scope'](http://localhost:3000/admin#)
[sentry-ruby-core (5.1.0) lib/sentry-ruby.rb:308:in `with_scope'](http://localhost:3000/admin#)
[sentry-ruby-core (5.1.0) lib/sentry/rack/capture_exceptions.rb:16:in `call'](http://localhost:3000/admin#)
[actionpack (7.0.2.2) lib/action_dispatch/middleware/show_exceptions.rb:26:in `call'](http://localhost:3000/admin#)
[railties (7.0.2.2) lib/rails/rack/logger.rb:36:in `call_app'](http://localhost:3000/admin#)
[railties (7.0.2.2) lib/rails/rack/logger.rb:25:in `block in call'](http://localhost:3000/admin#)
[activesupport (7.0.2.2) lib/active_support/tagged_logging.rb:99:in `block in tagged'](http://localhost:3000/admin#)
[activesupport (7.0.2.2) lib/active_support/tagged_logging.rb:37:in `tagged'](http://localhost:3000/admin#)
[activesupport (7.0.2.2) lib/active_support/tagged_logging.rb:99:in `tagged'](http://localhost:3000/admin#)
[railties (7.0.2.2) lib/rails/rack/logger.rb:25:in `call'](http://localhost:3000/admin#)
[sprockets-rails (3.4.2) lib/sprockets/rails/quiet_assets.rb:13:in `call'](http://localhost:3000/admin#)
[actionpack (7.0.2.2) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'](http://localhost:3000/admin#)
[request_store (1.5.1) lib/request_store/middleware.rb:19:in `call'](http://localhost:3000/admin#)
[actionpack (7.0.2.2) lib/action_dispatch/middleware/request_id.rb:26:in `call'](http://localhost:3000/admin#)
[rack (2.2.3) lib/rack/method_override.rb:24:in `call'](http://localhost:3000/admin#)
[rack (2.2.3) lib/rack/runtime.rb:22:in `call'](http://localhost:3000/admin#)
[activesupport (7.0.2.2) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'](http://localhost:3000/admin#)
[actionpack (7.0.2.2) lib/action_dispatch/middleware/executor.rb:14:in `call'](http://localhost:3000/admin#)
[actionpack (7.0.2.2) lib/action_dispatch/middleware/static.rb:23:in `call'](http://localhost:3000/admin#)
[rack (2.2.3) lib/rack/sendfile.rb:110:in `call'](http://localhost:3000/admin#)
[actionpack (7.0.2.2) lib/action_dispatch/middleware/host_authorization.rb:137:in `call'](http://localhost:3000/admin#)
[rack-cors (1.1.1) lib/rack/cors.rb:100:in `call'](http://localhost:3000/admin#)
[webpacker (275fbb56e6b0) lib/webpacker/dev_server_proxy.rb:25:in `perform_request'](http://localhost:3000/admin#)
[rack-proxy (0.7.2) lib/rack/proxy.rb:67:in `call'](http://localhost:3000/admin#)
[railties (7.0.2.2) lib/rails/engine.rb:530:in `call'](http://localhost:3000/admin#)
[puma (5.6.2) lib/puma/configuration.rb:252:in `call'](http://localhost:3000/admin#)
[puma (5.6.2) lib/puma/request.rb:77:in `block in handle_request'](http://localhost:3000/admin#)
[puma (5.6.2) lib/puma/thread_pool.rb:340:in `with_force_shutdown'](http://localhost:3000/admin#)
[puma (5.6.2) lib/puma/request.rb:76:in `handle_request'](http://localhost:3000/admin#)
[puma (5.6.2) lib/puma/server.rb:441:in `process_client'](http://localhost:3000/admin#)
[puma (5.6.2) lib/puma/thread_pool.rb:147:in `block in spawn_thread'](http://localhost:3000/admin#)

Session reset by devise with use of paper_trail

Hello !

Thanks for your awesome work on rails_admin_history_rollback !

I've probably notice an error dependant to the paper_trail project.

I've use rails_admin (github master), rails_admin_history_rollback (0.0.6), devise (3.5.2) and paper_trail (~> 4.0.0)

Login is always reseted by devise because paper_trail try to access to the current_user before devise (see this for more infos : paper-trail-gem/paper_trail#556 )

My fix was to use the paper_trail github master source and manually add set_paper_trail_whodunnit before_action as the readme said (https://github.com/airblade/paper_trail#finding-out-who-was-responsible-for-a-change) :

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  [...]
  before_action :set_paper_trail_whodunnit
  [...]
end

Now, it works very well.

c.c. @sferik

Not working on available_locales has no 'en' configuration

I'm using this gem with a non-English product.
I realized this gem crashes without :en on I18n.available_locales like that:

I18n.available_locales = [:ja] # or something excepts :en

It crashes here:

%td= l(object.created_at, format: :long, default: l(object.created_at, format: :long, locale: :en))

error message is:

Showing /home/ash/.anyenv/envs/rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/rails_admin_history_rollback-1.0.3/app/views/rails_admin/main/history.html.haml where line #41 raised:

:en is not a valid locale

Rollback for create action

Hello again,
I have this new error when I try a rollback for a create action
capture d ecran 2015-05-26 a 23 40 37

maybe some improvements are needed :
rollback "create record A" => delete record A, actually error
rollback "update record A , attribute name" => rollback "update record A attribute name with last value" , actually clone record A, attribute name with last value

Rails 5 support

Bundler could not find compatible versions for gem "rails":
  In snapshot (Gemfile.lock):
    rails (= 5.0.0.rc1)

  In Gemfile:
    rails (< 5.1, >= 5.0.0.rc1)

    rails_admin was resolved to 0.8.1, which depends on
      rails (< 6, >= 4.0)

    rails_admin_history_rollback (~> 0.0.7) was resolved to 0.0.7, which depends on
      rails (~> 4.2.0)

Not work with last papertrail RC

It seem that the index method for version object has disappeared from this papertrail RC

ActionView::Template::Error (undefined method `index' for #<PaperTrail::Version:0x007fe960919fa0>):
    1: %table#version.table.table-striped{:data => { :title => "#{@abstract_model} version ##{@version.index + 1} <small>[#{@version.event}]</small>", :rollbackurl => url_for(action: action(:history_index, @abstract_model).action_name, model_name: @abstract_model.to_param, version_id: @version.id), rollback: t("admin.history_rollback.table_headers.rollback"), cancel: t("admin.history_rollback.cancel"), confirm: t("admin.history_rollback.confirm")}}
    2:   %thead
    3:     %tr
    4:       %th= "#{t('admin.history_rollback.table_headers.field')}"
  activemodel (4.2.3) lib/active_model/attribute_methods.rb:433:in `method_missing'
  rails_admin_history_rollback (0.0.5) app/views/rails_admin/main/_version.html.haml:1:in `___sers_fmh__rvm_gems_ruby_______gems_rails_admin_history_rollback_______app_views_rails_admin_main__version_html_haml__3289281808284976726_70320173280960'
  actionview (4.2.3) lib/action_view/template.rb:145:in `block in render'
  activesupport (4.2.3) lib/active_support/notifications.rb:166:in `instrument'
  actionview (4.2.3) lib/action_view/template.rb:333:in `instrument'
  actionview (4.2.3) lib/action_view/template.rb:143:in `render'
  actionview (4.2.3) lib/action_view/renderer/partial_renderer.rb:339:in `render_partial'

Not working with fresh Rails 7 app?

Perhaps I'm missing something obvious. First time using rails_admin and paper_trail. Built a fresh new Rails 7 app out of the box (rails 7.0.3, ruby 3.1.2). Got rails_admin (3.0) and paper_trail (13.0) working great. Followed instructions to enable auditing with paper_trail and History tab is showing up / tracking changes just fine. However, adding this gem and following its instructions does not show any of the Rollback columns, etc (as seen in the sample screenshots). Any ideas? Thanks!

The asset "rails_admin/ra.history.css" is not present in the asset pipeline.

Hello,

I'm trying to use this awesome gem with

  • ruby 3.0.6
  • rails 7.0.7.2
  • rails_admin 3.1.2
  • paper_trail 15.0.0

When I run the rails_admin portal locally everything works as expected. However if I run in "production" mode, with config.assets.debug = false, The admin_portal displays and error.

image

And in sentry I see the error
The asset "rails_admin/ra.history.css" is not present in the asset pipeline.

I'm not super familiar with the rails asset pipeline. Happy to supply more information if it's helpful!

Thanks!

RailsAdmin::Extensions::PaperTrail::VersionProxy::AuditingAdapter can't modify frozen Hash

I've recently updated my Rails Admin project to railsadminteam/rails_admin@53eef4f and i've this error when i try to start the server:

โžœ  *** git:(master) โœ— rs
/Users/bci20/Sites/***/.gems/gems/bundler-1.12.5/lib/bundler/runtime.rb:89:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'rails_admin_history_rollback'. (Bundler::GemRequireError)
Gem Load Error is: can't modify frozen Hash
Backtrace for gem load error is:
/Users/bci20/Sites/***/vendor/ruby/2.3.0/gems/rails_admin_history_rollback-0.0.8/lib/rails_admin_history_rollback/extensions/paper_trail/auditing_adapter.rb:13:in `<class:AuditingAdapter>'
/Users/bci20/Sites/***/vendor/ruby/2.3.0/gems/rails_admin_history_rollback-0.0.8/lib/rails_admin_history_rollback/extensions/paper_trail/auditing_adapter.rb:12:in `<module:PaperTrail>'
/Users/bci20/Sites/***/vendor/ruby/2.3.0/gems/rails_admin_history_rollback-0.0.8/lib/rails_admin_history_rollback/extensions/paper_trail/auditing_adapter.rb:3:in `<module:Extensions>'
/Users/bci20/Sites/***/vendor/ruby/2.3.0/gems/rails_admin_history_rollback-0.0.8/lib/rails_admin_history_rollback/extensions/paper_trail/auditing_adapter.rb:2:in `<module:RailsAdmin>'
/Users/bci20/Sites/***/vendor/ruby/2.3.0/gems/rails_admin_history_rollback-0.0.8/lib/rails_admin_history_rollback/extensions/paper_trail/auditing_adapter.rb:1:in `<top (required)>'
/Users/bci20/Sites/***/vendor/ruby/2.3.0/gems/rails_admin_history_rollback-0.0.8/lib/rails_admin_history_rollback.rb:10:in `require'
/Users/bci20/Sites/***/vendor/ruby/2.3.0/gems/rails_admin_history_rollback-0.0.8/lib/rails_admin_history_rollback.rb:10:in `<top (required)>'

I think the problem comes from this commit:
railsadminteam/rails_admin@c94e36a

How could we fix it ?

Note: I've rollback to rails_admin v1.0.0.rc to be able to start my project.
Note 2: I've finally rollback to rails_admin ~> 0.8.1 due to others bugs in the rc of Rails Admin.

Allow usage of custom Version class

Action is using Papertrail::Version thus when someone is using custom Version class created with PaperTrail::VersionConcern then he have to redefine action or do some constant tricks. It can be simplified eg. by adding config option to pass version class name, and then using it instead of PaperTrail::Version

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.