railsadminteam / rails_admin

RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data
MIT License
7.89k stars 2.25k forks source link

Cannot get a signed_id for a new record (ArgumentError) #3685

Closed g13ydson closed 3 months ago

g13ydson commented 3 months ago

Describe the bug I'm getting this error when try to create a new object with upload using activeStorage.

raise ArgumentError, "Cannot get a signed_id for a new record" if new_record?
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

I'm using rails 7.1.2 and ruby 3.3.0

Reproduction steps Steps to reproduce the issue seen.

Expected behavior A clear and concise description of what you expected to happen.

Additional context

activerecord (7.1.3.2) lib/active_record/signed_id.rb in signed_id at line 113
activestorage (7.1.3.2) app/models/active_storage/blob.rb in signed_id at line 164
activestorage (7.1.3.2) app/models/active_storage/attachment.rb in signed_id at line 34
activesupport (7.1.3.2) lib/active_support/core_ext/module/delegation.rb in public_send at line 333
activesupport (7.1.3.2) lib/active_support/core_ext/module/delegation.rb in method_missing at line 333
activestorage (7.1.3.2) config/routes.rb in block (2 levels) in <main> at line 66
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in instance_exec at line 679
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in eval_block at line 679
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in call at line 668
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in block (2 levels) in add_url_helper at line 162
actionpack (7.1.3.2) lib/action_dispatch/routing/url_for.rb in public_send at line 218
actionpack (7.1.3.2) lib/action_dispatch/routing/url_for.rb in route_for at line 218
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in route_for at line 545
activestorage (7.1.3.2) config/routes.rb in block (2 levels) in <main> at line 27
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in instance_exec at line 679
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in eval_block at line 679
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in call at line 668
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in block (2 levels) in add_url_helper at line 156
rails_admin (3.1.2) lib/rails_admin/config/fields/types/active_storage.rb in resource_url at line 53
rails_admin (3.1.2) lib/rails_admin/config/fields/types/file_upload.rb in block in <class:FileUpload> at line 43
rails_admin (3.1.2) lib/rails_admin/config/configurable.rb in instance_eval at line 77
rails_admin (3.1.2) lib/rails_admin/config/configurable.rb in block in register_instance_option at line 77
rails_admin (3.1.2) app/views/rails_admin/main/_form_file_upload.html.erb at line 6
actionview (7.1.3.2) lib/action_view/base.rb in public_send at line 264
actionview (7.1.3.2) lib/action_view/base.rb in _run at line 264
actionview (7.1.3.2) lib/action_view/template.rb in block in render at line 261
activesupport (7.1.3.2) lib/active_support/notifications.rb in block in instrument at line 206
activesupport (7.1.3.2) lib/active_support/notifications/instrumenter.rb in instrument at line 58
sentry-rails (5.17.3) lib/sentry/rails/tracing.rb in instrument at line 54
activesupport (7.1.3.2) lib/active_support/notifications.rb in instrument at line 206
actionview (7.1.3.2) lib/action_view/template.rb in instrument_render_template at line 549
actionview (7.1.3.2) lib/action_view/template.rb in render at line 249
actionview (7.1.3.2) lib/action_view/renderer/partial_renderer.rb in block in render_partial_template at line 252
activesupport (7.1.3.2) lib/active_support/notifications.rb in block in instrument at line 206
activesupport (7.1.3.2) lib/active_support/notifications/instrumenter.rb in instrument at line 58
sentry-rails (5.17.3) lib/sentry/rails/tracing.rb in instrument at line 54
activesupport (7.1.3.2) lib/active_support/notifications.rb in instrument at line 206
actionview (7.1.3.2) lib/action_view/renderer/partial_renderer.rb in render_partial_template at line 246
actionview (7.1.3.2) lib/action_view/renderer/partial_renderer.rb in render at line 237
actionview (7.1.3.2) lib/action_view/renderer/renderer.rb in render_partial_to_object at line 83
actionview (7.1.3.2) lib/action_view/renderer/renderer.rb in render_to_object at line 29
actionview (7.1.3.2) lib/action_view/renderer/renderer.rb in render at line 24
actionview (7.1.3.2) lib/action_view/helpers/rendering_helper.rb in block in render at line 37
actionview (7.1.3.2) lib/action_view/base.rb in in_rendering_context at line 291
actionview (7.1.3.2) lib/action_view/helpers/rendering_helper.rb in render at line 33
rails_admin (3.1.2) lib/rails_admin/config/fields/base.rb in block in <class:Base> at line 281
rails_admin (3.1.2) lib/rails_admin/config/configurable.rb in instance_eval at line 77
rails_admin (3.1.2) lib/rails_admin/config/configurable.rb in block in register_instance_option at line 77
rails_admin (3.1.2) lib/rails_admin/config/proxyable/proxy.rb in method_missing at line 27
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in field_for at line 77
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in block in input_for at line 62
actionview (7.1.3.2) lib/action_view/helpers/capture_helper.rb in block in capture at line 50
actionview (7.1.3.2) lib/action_view/buffers.rb in capture at line 75
actionview (7.1.3.2) lib/action_view/helpers/capture_helper.rb in capture at line 50
actionview (7.1.3.2) lib/action_view/helpers/tag_helper.rb in content_tag at line 349
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in input_for at line 61
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in block in field_wrapper_for at line 51
actionview (7.1.3.2) lib/action_view/helpers/capture_helper.rb in block in capture at line 50
actionview (7.1.3.2) lib/action_view/buffers.rb in capture at line 75
actionview (7.1.3.2) lib/action_view/helpers/capture_helper.rb in capture at line 50
actionview (7.1.3.2) lib/action_view/helpers/tag_helper.rb in content_tag at line 349
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in field_wrapper_for at line 48
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in block (2 levels) in fieldset_for at line 39
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in collect at line 39
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in block in fieldset_for at line 39
actionview (7.1.3.2) lib/action_view/helpers/capture_helper.rb in block in capture at line 50
actionview (7.1.3.2) lib/action_view/buffers.rb in capture at line 75
actionview (7.1.3.2) lib/action_view/helpers/capture_helper.rb in capture at line 50
actionview (7.1.3.2) lib/action_view/helpers/tag_helper.rb in content_tag at line 349
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in fieldset_for at line 35
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in block (2 levels) in generate at line 20
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in collect at line 19
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in block in generate at line 19
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in without_field_error_proc_added_div at line 143
rails_admin (3.1.2) app/helpers/rails_admin/form_builder.rb in generate at line 11
rails_admin (3.1.2) app/views/rails_admin/main/new.html.erb at line 2
actionview (7.1.3.2) lib/action_view/helpers/capture_helper.rb in block in capture at line 50
actionview (7.1.3.2) lib/action_view/buffers.rb in capture at line 75
actionview (7.1.3.2) lib/action_view/helpers/capture_helper.rb in capture at line 50
actionview (7.1.3.2) lib/action_view/helpers/form_helper.rb in form_with at line 773
actionview (7.1.3.2) lib/action_view/helpers/form_helper.rb in form_for at line 461
rails_admin (3.1.2) app/helpers/rails_admin/main_helper.rb in rails_admin_form_for at line 9
rails_admin (3.1.2) app/views/rails_admin/main/new.html.erb at line 1
actionview (7.1.3.2) lib/action_view/base.rb in public_send at line 264
actionview (7.1.3.2) lib/action_view/base.rb in _run at line 264
actionview (7.1.3.2) lib/action_view/template.rb in block in render at line 261
activesupport (7.1.3.2) lib/active_support/notifications.rb in block in instrument at line 206
activesupport (7.1.3.2) lib/active_support/notifications/instrumenter.rb in instrument at line 58
sentry-rails (5.17.3) lib/sentry/rails/tracing.rb in instrument at line 54
activesupport (7.1.3.2) lib/active_support/notifications.rb in instrument at line 206
actionview (7.1.3.2) lib/action_view/template.rb in instrument_render_template at line 549
actionview (7.1.3.2) lib/action_view/template.rb in render at line 249
actionview (7.1.3.2) lib/action_view/renderer/template_renderer.rb in block (2 levels) in render_template at line 66
activesupport (7.1.3.2) lib/active_support/notifications.rb in block in instrument at line 206
activesupport (7.1.3.2) lib/active_support/notifications/instrumenter.rb in instrument at line 58
sentry-rails (5.17.3) lib/sentry/rails/tracing.rb in instrument at line 54
activesupport (7.1.3.2) lib/active_support/notifications.rb in instrument at line 206
actionview (7.1.3.2) lib/action_view/renderer/template_renderer.rb in block in render_template at line 60
actionview (7.1.3.2) lib/action_view/renderer/template_renderer.rb in block in render_with_layout at line 76
activesupport (7.1.3.2) lib/active_support/notifications.rb in block in instrument at line 206
activesupport (7.1.3.2) lib/active_support/notifications/instrumenter.rb in instrument at line 58
sentry-rails (5.17.3) lib/sentry/rails/tracing.rb in instrument at line 54
activesupport (7.1.3.2) lib/active_support/notifications.rb in instrument at line 206
actionview (7.1.3.2) lib/action_view/renderer/template_renderer.rb in render_with_layout at line 75
actionview (7.1.3.2) lib/action_view/renderer/template_renderer.rb in render_template at line 59
actionview (7.1.3.2) lib/action_view/renderer/template_renderer.rb in render at line 11
actionview (7.1.3.2) lib/action_view/renderer/renderer.rb in render_template_to_object at line 63
actionview (7.1.3.2) lib/action_view/renderer/renderer.rb in render_to_object at line 31
actionview (7.1.3.2) lib/action_view/rendering.rb in block in _render_template at line 135
actionview (7.1.3.2) lib/action_view/base.rb in in_rendering_context at line 291
actionview (7.1.3.2) lib/action_view/rendering.rb in _render_template at line 134
actionpack (7.1.3.2) lib/action_controller/metal/streaming.rb in _render_template at line 256
actionview (7.1.3.2) lib/action_view/rendering.rb in render_to_body at line 121
actionpack (7.1.3.2) lib/action_controller/metal/rendering.rb in render_to_body at line 158
actionpack (7.1.3.2) lib/action_controller/metal/renderers.rb in render_to_body at line 141
actionpack (7.1.3.2) lib/abstract_controller/rendering.rb in render at line 27
actionpack (7.1.3.2) lib/action_controller/metal/rendering.rb in render at line 139
actionpack (7.1.3.2) lib/action_controller/metal/instrumentation.rb in block (2 levels) in render at line 29
benchmark.rb in realtime at line 313

activesupport (7.1.3.2) lib/active_support/core_ext/benchmark.rb in ms at line 14
actionpack (7.1.3.2) lib/action_controller/metal/instrumentation.rb in block in render at line 29
actionpack (7.1.3.2) lib/action_controller/metal/instrumentation.rb in cleanup_view_runtime at line 98
activerecord (7.1.3.2) lib/active_record/railties/controller_runtime.rb in cleanup_view_runtime at line 39
actionpack (7.1.3.2) lib/action_controller/metal/instrumentation.rb in render at line 28
rails_admin (3.1.2) app/controllers/rails_admin/main_controller.rb in block (2 levels) in handle_save_error at line 114
actionpack (7.1.3.2) lib/action_controller/metal/mime_responds.rb in respond_to at line 214
rails_admin (3.1.2) app/controllers/rails_admin/main_controller.rb in handle_save_error at line 113
rails_admin (3.1.2) lib/rails_admin/config/actions/new.rb in block (2 levels) in <class:New> at line 52
rails_admin (3.1.2) app/controllers/rails_admin/main_controller.rb in instance_eval at line 38
rails_admin (3.1.2) app/controllers/rails_admin/main_controller.rb in action_missing at line 38
actionpack (7.1.3.2) lib/abstract_controller/base.rb in _handle_action_missing at line 238
actionpack (7.1.3.2) lib/action_controller/metal/basic_implicit_render.rb in send_action at line 6
actionpack (7.1.3.2) lib/abstract_controller/base.rb in process_action at line 224
actionpack (7.1.3.2) lib/action_controller/metal/rendering.rb in process_action at line 165
actionpack (7.1.3.2) lib/abstract_controller/callbacks.rb in block in process_action at line 259
activesupport (7.1.3.2) lib/active_support/callbacks.rb in block in run_callbacks at line 121
actiontext (7.1.3.2) lib/action_text/rendering.rb in with_renderer at line 23
actiontext (7.1.3.2) lib/action_text/engine.rb in block (4 levels) in <class:Engine> at line 69
activesupport (7.1.3.2) lib/active_support/callbacks.rb in instance_exec at line 130
activesupport (7.1.3.2) lib/active_support/callbacks.rb in block in run_callbacks at line 130
sentry-rails (5.17.3) lib/sentry/rails/controller_transaction.rb in block in sentry_around_action at line 17
sentry-ruby (5.17.3) lib/sentry/hub.rb in block in with_child_span at line 109
sentry-ruby (5.17.3) lib/sentry/span.rb in with_child_span at line 211
sentry-ruby (5.17.3) lib/sentry/hub.rb in with_child_span at line 107
sentry-ruby (5.17.3) lib/sentry-ruby.rb in with_child_span at line 490
sentry-rails (5.17.3) lib/sentry/rails/controller_transaction.rb in sentry_around_action at line 14
activesupport (7.1.3.2) lib/active_support/callbacks.rb in block in run_callbacks at line 130
activesupport (7.1.3.2) lib/active_support/callbacks.rb in run_callbacks at line 141
actionpack (7.1.3.2) lib/abstract_controller/callbacks.rb in process_action at line 258
actionpack (7.1.3.2) lib/action_controller/metal/rescue.rb in process_action at line 25
actionpack (7.1.3.2) lib/action_controller/metal/instrumentation.rb in block in process_action at line 74
activesupport (7.1.3.2) lib/active_support/notifications.rb in block in instrument at line 206
activesupport (7.1.3.2) lib/active_support/notifications/instrumenter.rb in instrument at line 58
sentry-rails (5.17.3) lib/sentry/rails/tracing.rb in instrument at line 54
activesupport (7.1.3.2) lib/active_support/notifications.rb in instrument at line 206
actionpack (7.1.3.2) lib/action_controller/metal/instrumentation.rb in process_action at line 73
actionpack (7.1.3.2) lib/action_controller/metal/params_wrapper.rb in process_action at line 261
activerecord (7.1.3.2) lib/active_record/railties/controller_runtime.rb in process_action at line 32
actionpack (7.1.3.2) lib/abstract_controller/base.rb in process at line 160
actionview (7.1.3.2) lib/action_view/rendering.rb in process at line 40
actionpack (7.1.3.2) lib/action_controller/metal.rb in dispatch at line 227
actionpack (7.1.3.2) lib/action_controller/metal.rb in dispatch at line 309
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in dispatch at line 49
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in serve at line 32
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in block in serve at line 51
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in block in find_routes at line 131
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in each at line 124
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in find_routes at line 124
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in serve at line 32
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in call at line 882
railties (7.1.3.2) lib/rails/engine.rb in call at line 536
railties (7.1.3.2) lib/rails/railtie.rb in public_send at line 226
railties (7.1.3.2) lib/rails/railtie.rb in method_missing at line 226
actionpack (7.1.3.2) lib/action_dispatch/routing/mapper.rb in block in <class:Constraints> at line 22
actionpack (7.1.3.2) lib/action_dispatch/routing/mapper.rb in serve at line 51
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in block in serve at line 51
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in block in find_routes at line 131
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in each at line 124
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in find_routes at line 124
actionpack (7.1.3.2) lib/action_dispatch/journey/router.rb in serve at line 32
actionpack (7.1.3.2) lib/action_dispatch/routing/route_set.rb in call at line 882
warden (1.2.9) lib/warden/manager.rb in block in call at line 36
warden (1.2.9) lib/warden/manager.rb in catch at line 34
warden (1.2.9) lib/warden/manager.rb in call at line 34
rack (3.0.10) lib/rack/tempfile_reaper.rb in call at line 20
rack (3.0.10) lib/rack/etag.rb in call at line 29
rack (3.0.10) lib/rack/conditional_get.rb in call at line 43
rack (3.0.10) lib/rack/head.rb in call at line 15
actionpack (7.1.3.2) lib/action_dispatch/http/permissions_policy.rb in call at line 36
actionpack (7.1.3.2) lib/action_dispatch/http/content_security_policy.rb in call at line 33
rack-session (2.0.0) lib/rack/session/abstract/id.rb in context at line 272
rack-session (2.0.0) lib/rack/session/abstract/id.rb in call at line 266
actionpack (7.1.3.2) lib/action_dispatch/middleware/cookies.rb in call at line 689
actionpack (7.1.3.2) lib/action_dispatch/middleware/callbacks.rb in block in call at line 29
activesupport (7.1.3.2) lib/active_support/callbacks.rb in run_callbacks at line 101
actionpack (7.1.3.2) lib/action_dispatch/middleware/callbacks.rb in call at line 28
sentry-rails (5.17.3) lib/sentry/rails/rescued_exception_interceptor.rb in call at line 12
actionpack (7.1.3.2) lib/action_dispatch/middleware/debug_exceptions.rb in call at line 29
sentry-ruby (5.17.3) lib/sentry/rack/capture_exceptions.rb in block (2 levels) in call at line 29
sentry-ruby (5.17.3) lib/sentry/hub.rb in with_session_tracking at line 251
sentry-ruby (5.17.3) lib/sentry-ruby.rb in with_session_tracking at line 403
sentry-ruby (5.17.3) lib/sentry/rack/capture_exceptions.rb in block in call at line 20
sentry-ruby (5.17.3) lib/sentry/hub.rb in with_scope at line 59
sentry-ruby (5.17.3) lib/sentry-ruby.rb in with_scope at line 383
sentry-ruby (5.17.3) lib/sentry/rack/capture_exceptions.rb in call at line 19
actionpack (7.1.3.2) lib/action_dispatch/middleware/show_exceptions.rb in call at line 31
railties (7.1.3.2) lib/rails/rack/logger.rb in call_app at line 37
railties (7.1.3.2) lib/rails/rack/logger.rb in block in call at line 24
activesupport (7.1.3.2) lib/active_support/tagged_logging.rb in block in tagged at line 135
activesupport (7.1.3.2) lib/active_support/tagged_logging.rb in tagged at line 39
activesupport (7.1.3.2) lib/active_support/tagged_logging.rb in tagged at line 135
activesupport (7.1.3.2) lib/active_support/broadcast_logger.rb in method_missing at line 240
railties (7.1.3.2) lib/rails/rack/logger.rb in call at line 24
actionpack (7.1.3.2) lib/action_dispatch/middleware/remote_ip.rb in call at line 92
request_store (1.6.0) lib/request_store/middleware.rb in call at line 19
actionpack (7.1.3.2) lib/action_dispatch/middleware/request_id.rb in call at line 28
1
rack (3.0.10) lib/rack/runtime.rb in call at line 24
actionpack (7.1.3.2) lib/action_dispatch/middleware/executor.rb in call at line 14
actionpack (7.1.3.2) lib/action_dispatch/middleware/static.rb in call at line 25
rack (3.0.10) lib/rack/sendfile.rb in call at line 114
railties (7.1.3.2) lib/rails/engine.rb in call at line 536
puma (6.4.2) lib/puma/configuration.rb in call at line 272
puma (6.4.2) lib/puma/request.rb in block in handle_request at line 100
puma (6.4.2) lib/puma/thread_pool.rb in with_force_shutdown at line 378
puma (6.4.2) lib/puma/request.rb in handle_request at line 99
puma (6.4.2) lib/puma/server.rb in process_client at line 464
puma (6.4.2) lib/puma/server.rb in block in run at line 245
puma (6.4.2) lib/puma/thread_pool.rb in block in spawn_thread at line 155

Add any other context about the problem here.

g13ydson commented 3 months ago

I managed to solve it by overriding the pretty_value of the field and checking if the file is attached and persisted:

field :avatar do
  pretty_value do
    if value.presence && value.attached? && value.persisted?
      v = bindings[:view]
      url = resource_url
      if image
        thumb_url = resource_url(thumb_method)
        image_html = v.image_tag(thumb_url, class: "img-thumbnail")
        (url == thumb_url) ? image_html : v.link_to(image_html, url, target: "_blank", rel: "noopener noreferrer")
      else
        v.link_to(link_name, url, target: "_blank", rel: "noopener noreferrer")
      end
    end
  end
end

Ref https://github.com/rails/rails/issues/50234#issuecomment-1836720876