-
-
Notifications
You must be signed in to change notification settings - Fork 302
Open
Labels
Description
Describe the bug
When a model uses a composite primary key, several things starts breaking in Avo. It seems like finders aren't used consistently in caching and action (and maybe other areas)
Reproduction repository for the bug
https://github.com/tangibleMaterials/avo-reproduction/tree/composite-fk
Steps to use in the reproduction repository
Steps to reproduce the behavior:
- Run the seed
- Click on a 'course enrollment'
- Crash
ActiveRecord::RecordNotFound (Couldn't find CourseEnrollment with '["course_id", "student_id"]'="102_3"):
activerecord (8.0.3) lib/active_record/core.rb:280:in 'ActiveRecord::Core::ClassMethods#find'
avo (3.25.2) lib/avo/resources/base.rb:87:in 'block in <class:Base>'
avo (3.25.2) lib/avo/execution_context.rb:69:in 'BasicObject#instance_exec'
avo (3.25.2) lib/avo/execution_context.rb:69:in 'Avo::ExecutionContext#handle'
avo (3.25.2) lib/avo/resources/base.rb:253:in 'Avo::Resources::Base.find_record'
avo (3.25.2) lib/avo/resources/base.rb:276:in 'Avo::Resources::Base#find_record'
avo (3.25.2) app/controllers/avo/associations_controller.rb:25:in 'Avo::AssociationsController#index'
actionpack (8.0.3) lib/action_controller/metal/basic_implicit_render.rb:8:in 'ActionController::BasicImplicitRender#send_action'
actionpack (8.0.3) lib/abstract_controller/base.rb:215:in 'AbstractController::Base#process_action'
actionpack (8.0.3) lib/action_controller/metal/rendering.rb:193:in 'ActionController::Rendering#process_action'
actionpack (8.0.3) lib/abstract_controller/callbacks.rb:261:in 'block in AbstractController::Callbacks#process_action'
activesupport (8.0.3) lib/active_support/callbacks.rb:120:in 'block in ActiveSupport::Callbacks#run_callbacks'
i18n (1.14.7) lib/i18n.rb:353:in 'I18n::Base#with_locale'
avo (3.25.2) app/controllers/avo/base_application_controller.rb:271:in 'Avo::BaseApplicationController#set_avo_locale'
activesupport (8.0.3) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
turbo-rails (2.0.17) lib/turbo-rails.rb:24:in 'Turbo.with_request_id'
turbo-rails (2.0.17) app/controllers/concerns/turbo/request_id_tracking.rb:10:in 'Turbo::RequestIdTracking#turbo_tracking_request_id'
activesupport (8.0.3) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
actiontext (8.0.3) lib/action_text/rendering.rb:25:in 'ActionText::Rendering::ClassMethods#with_renderer'
actiontext (8.0.3) lib/action_text/engine.rb:71:in 'block (4 levels) in <class:Engine>'
activesupport (8.0.3) lib/active_support/callbacks.rb:129:in 'BasicObject#instance_exec'
activesupport (8.0.3) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
activesupport (8.0.3) lib/active_support/callbacks.rb:140:in 'ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.3) lib/abstract_controller/callbacks.rb:260:in 'AbstractController::Callbacks#process_action'
actionpack (8.0.3) lib/action_controller/metal/rescue.rb:27:in 'ActionController::Rescue#process_action'
actionpack (8.0.3) lib/action_controller/metal/instrumentation.rb:76:in 'block in ActionController::Instrumentation#process_action'
activesupport (8.0.3) lib/active_support/notifications.rb:210:in 'block in ActiveSupport::Notifications.instrument'
activesupport (8.0.3) lib/active_support/notifications/instrumenter.rb:58:in 'ActiveSupport::Notifications::Instrumenter#instrument'
activesupport (8.0.3) lib/active_support/notifications.rb:210:in 'ActiveSupport::Notifications.instrument'
actionpack (8.0.3) lib/action_controller/metal/instrumentation.rb:75:in 'ActionController::Instrumentation#process_action'
actionpack (8.0.3) lib/action_controller/metal/params_wrapper.rb:259:in 'ActionController::ParamsWrapper#process_action'
activerecord (8.0.3) lib/active_record/railties/controller_runtime.rb:39:in 'ActiveRecord::Railties::ControllerRuntime#process_action'
actionpack (8.0.3) lib/abstract_controller/base.rb:152:in 'AbstractController::Base#process'
actionview (8.0.3) lib/action_view/rendering.rb:40:in 'ActionView::Rendering#process'
actionpack (8.0.3) lib/action_controller/metal.rb:252:in 'ActionController::Metal#dispatch'
actionpack (8.0.3) lib/action_controller/metal.rb:335:in 'ActionController::Metal.dispatch'
actionpack (8.0.3) lib/action_dispatch/routing/route_set.rb:67:in 'ActionDispatch::Routing::RouteSet::Dispatcher#dispatch'
actionpack (8.0.3) lib/action_dispatch/routing/route_set.rb:50:in 'ActionDispatch::Routing::RouteSet::Dispatcher#serve'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:53:in 'block in ActionDispatch::Journey::Router#serve'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:133:in 'block in ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:126:in 'Array#each'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:126:in 'ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:34:in 'ActionDispatch::Journey::Router#serve'
actionpack (8.0.3) lib/action_dispatch/routing/route_set.rb:908:in 'ActionDispatch::Routing::RouteSet#call'
railties (8.0.3) lib/rails/engine/lazy_route_set.rb:60:in 'Rails::Engine::LazyRouteSet#call'
railties (8.0.3) lib/rails/engine.rb:535:in 'Rails::Engine#call'
railties (8.0.3) lib/rails/railtie.rb:226:in 'Kernel#public_send'
railties (8.0.3) lib/rails/railtie.rb:226:in 'Rails::Railtie.method_missing'
actionpack (8.0.3) lib/action_dispatch/routing/mapper.rb:33:in 'block in <class:Constraints>'
actionpack (8.0.3) lib/action_dispatch/routing/mapper.rb:62:in 'ActionDispatch::Routing::Mapper::Constraints#serve'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:53:in 'block in ActionDispatch::Journey::Router#serve'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:133:in 'block in ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:126:in 'Array#each'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:126:in 'ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.3) lib/action_dispatch/journey/router.rb:34:in 'ActionDispatch::Journey::Router#serve'
actionpack (8.0.3) lib/action_dispatch/routing/route_set.rb:908:in 'ActionDispatch::Routing::RouteSet#call'
railties (8.0.3) lib/rails/engine/lazy_route_set.rb:60:in 'Rails::Engine::LazyRouteSet#call'
rack (3.2.3) lib/rack/static.rb:162:in 'Rack::Static#call'
rack (3.2.3) lib/rack/static.rb:162:in 'Rack::Static#call'
rack (3.2.3) lib/rack/static.rb:162:in 'Rack::Static#call'
rack (3.2.3) lib/rack/tempfile_reaper.rb:20:in 'Rack::TempfileReaper#call'
rack (3.2.3) lib/rack/etag.rb:29:in 'Rack::ETag#call'
rack (3.2.3) lib/rack/conditional_get.rb:31:in 'Rack::ConditionalGet#call'
rack (3.2.3) lib/rack/head.rb:15:in 'Rack::Head#call'
actionpack (8.0.3) lib/action_dispatch/http/permissions_policy.rb:38:in 'ActionDispatch::PermissionsPolicy::Middleware#call'
actionpack (8.0.3) lib/action_dispatch/http/content_security_policy.rb:38:in 'ActionDispatch::ContentSecurityPolicy::Middleware#call'
rack-session (2.1.1) lib/rack/session/abstract/id.rb:274:in 'Rack::Session::Abstract::Persisted#context'
rack-session (2.1.1) lib/rack/session/abstract/id.rb:268:in 'Rack::Session::Abstract::Persisted#call'
actionpack (8.0.3) lib/action_dispatch/middleware/cookies.rb:706:in 'ActionDispatch::Cookies#call'
activerecord (8.0.3) lib/active_record/migration.rb:670:in 'ActiveRecord::Migration::CheckPending#call'
actionpack (8.0.3) lib/action_dispatch/middleware/callbacks.rb:31:in 'block in ActionDispatch::Callbacks#call'
activesupport (8.0.3) lib/active_support/callbacks.rb:100:in 'ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.3) lib/action_dispatch/middleware/callbacks.rb:30:in 'ActionDispatch::Callbacks#call'
actionpack (8.0.3) lib/action_dispatch/middleware/executor.rb:16:in 'ActionDispatch::Executor#call'
actionpack (8.0.3) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in 'ActionDispatch::ActionableExceptions#call'
actionpack (8.0.3) lib/action_dispatch/middleware/debug_exceptions.rb:31:in 'ActionDispatch::DebugExceptions#call'
web-console (4.2.1) lib/web_console/middleware.rb:132:in 'WebConsole::Middleware#call_app'
web-console (4.2.1) lib/web_console/middleware.rb:28:in 'block in WebConsole::Middleware#call'
web-console (4.2.1) lib/web_console/middleware.rb:17:in 'Kernel#catch'
web-console (4.2.1) lib/web_console/middleware.rb:17:in 'WebConsole::Middleware#call'
actionpack (8.0.3) lib/action_dispatch/middleware/show_exceptions.rb:32:in 'ActionDispatch::ShowExceptions#call'
railties (8.0.3) lib/rails/rack/logger.rb:41:in 'Rails::Rack::Logger#call_app'
railties (8.0.3) lib/rails/rack/logger.rb:29:in 'Rails::Rack::Logger#call'
actionpack (8.0.3) lib/action_dispatch/middleware/remote_ip.rb:96:in 'ActionDispatch::RemoteIp#call'
actionpack (8.0.3) lib/action_dispatch/middleware/request_id.rb:34:in 'ActionDispatch::RequestId#call'
rack (3.2.3) lib/rack/method_override.rb:28:in 'Rack::MethodOverride#call'
rack (3.2.3) lib/rack/runtime.rb:24:in 'Rack::Runtime#call'
actionpack (8.0.3) lib/action_dispatch/middleware/server_timing.rb:61:in 'block in ActionDispatch::ServerTiming#call'
actionpack (8.0.3) lib/action_dispatch/middleware/server_timing.rb:26:in 'ActionDispatch::ServerTiming::Subscriber#collect_events'
actionpack (8.0.3) lib/action_dispatch/middleware/server_timing.rb:60:in 'ActionDispatch::ServerTiming#call'
actionpack (8.0.3) lib/action_dispatch/middleware/executor.rb:16:in 'ActionDispatch::Executor#call'
propshaft (1.3.1) lib/propshaft/server.rb:37:in 'Propshaft::Server#call'
actionpack (8.0.3) lib/action_dispatch/middleware/static.rb:27:in 'ActionDispatch::Static#call'
rack (3.2.3) lib/rack/sendfile.rb:131:in 'Rack::Sendfile#call'
actionpack (8.0.3) lib/action_dispatch/middleware/host_authorization.rb:143:in 'ActionDispatch::HostAuthorization#call'
railties (8.0.3) lib/rails/engine.rb:535:in 'Rails::Engine#call'
puma (7.1.0) lib/puma/configuration.rb:300:in 'Puma::Configuration::ConfigMiddleware#call'
puma (7.1.0) lib/puma/request.rb:101:in 'block in Puma::Request#handle_request'
puma (7.1.0) lib/puma/thread_pool.rb:355:in 'Puma::ThreadPool#with_force_shutdown'
puma (7.1.0) lib/puma/request.rb:100:in 'Puma::Request#handle_request'
puma (7.1.0) lib/puma/server.rb:503:in 'Puma::Server#process_client'
puma (7.1.0) lib/puma/server.rb:262:in 'block in Puma::Server#run'
puma (7.1.0) lib/puma/thread_pool.rb:182:in 'block in Puma::ThreadPool#spawn_thread'
Another issue we're seeing in our main app, but I'm still failing to reproduce here (I'll create a another ticket with better steps if needed), are the actions are also failing to find resources correctly. I suspect this is a postgres only issue.
Expected behavior & Actual behavior
Composite primary keys should be fully supported by Avo.
System configuration
Avo version: latest
Rails version: latest
Ruby version: latest
License type:
- Community
- Pro
- Advanced
Are you using Avo monkey patches, overriding views or view components?
- Yes. If so, please post code samples.
- [x No
Screenshots or screen recordings
Additional context
Impact
- High impact (It makes my app un-usable.)
- Medium impact (I'm annoyed, but I'll live.)
- Low impact (It's really a tiny thing that I could live with.)
Urgency
- High urgency (I can't continue development without it.)
- Medium urgency (I found a workaround, but I'd love to have it fixed.)
- Low urgency (It can wait. I just wanted you to know about it.)
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
To Do