mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-09-27 16:34:59 -04:00
Optimize PaperTrail whodunnit query in CropsController#show (#4796)
* Optimize PaperTrail whodunnit query in CropsController#show Replace @crop.versions.map(&:whodunnit) with @crop.versions.distinct.pluck(:whodunnit) to avoid instantiating all PaperTrail version objects and loading object/object_changes into memory. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Optimize PaperTrail whodunnit query in CropsController#show Replace @crop.versions.map(&:whodunnit) with @crop.versions.distinct.pluck(:whodunnit) to avoid instantiating all PaperTrail version objects and loading object/object_changes into memory. Added unit test in spec/controllers/crops_controller_spec.rb. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Optimize PaperTrail whodunnit query in CropsController#show Use @crop.versions.reorder(nil).distinct.pluck(:whodunnit) to avoid instantiating all PaperTrail version objects into memory and prevent PostgreSQL PG::InvalidColumnReference errors with SELECT DISTINCT. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Fix crop route parameter in controller spec Update parameter key from id to slug in CropsController show spec to match param: :slug route definition. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
This commit is contained in:
2 files changed
+22
-1
No files matched your search
@@ -73,7 +73,7 @@ class CropsController < ApplicationController
|
||||
format.html do
|
||||
@posts = @crop.posts.order(created_at: :desc).paginate(page: params[:page])
|
||||
@companions = @crop.companions.approved
|
||||
member_ids = @crop.versions.map(&:whodunnit).compact.map(&:to_i)
|
||||
member_ids = @crop.versions.reorder(nil).distinct.pluck(:whodunnit).compact.map(&:to_i)
|
||||
@version_members = Member.where(id: member_ids).index_by(&:id)
|
||||
end
|
||||
format.svg do
|
||||
|
||||
@@ -28,6 +28,27 @@ describe CropsController do
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET show" do
|
||||
let!(:crop) { create(:crop) }
|
||||
let!(:member) { create(:member) }
|
||||
|
||||
before do
|
||||
PaperTrail::Version.create!(
|
||||
item_type: 'Crop',
|
||||
item_id: crop.id,
|
||||
event: 'update',
|
||||
whodunnit: member.id.to_s,
|
||||
created_at: Time.current
|
||||
)
|
||||
end
|
||||
|
||||
it "fetches crop show page and sets version members using distinct whodunnit IDs" do
|
||||
get :show, params: { slug: crop.to_param }
|
||||
expect(response).to be_successful
|
||||
expect(assigns(:version_members)).to eq({ member.id => member })
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET crop hierarchy" do
|
||||
describe 'fetches the crop hierarchy page' do
|
||||
context 'wrangler' do
|
||||
|
||||
Reference in new issue
Block a user