mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-05-11 01:05:01 -04:00
When using Searchkick with `load: false`, search results are returned as HashResponse objects which do not support model associations or standard Rails URL helpers that expect model instances. This commit updates HarvestsController and SeedsController to conditionally load ActiveRecord objects when CSV format is requested, ensuring that the export templates can access the necessary associations. Similar logic was also applied to CropsController. Additionally, a typo in the Crops CSV shaper was fixed. Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
103 lines
2.5 KiB
Ruby
103 lines
2.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class SeedsController < DataController
|
|
def index
|
|
where = {}
|
|
|
|
if params[:member_slug].present?
|
|
@owner = Member.find_by!(slug: params[:member_slug])
|
|
where['owner_id'] = @owner.id
|
|
end
|
|
|
|
if params[:crop_slug].present?
|
|
@crop = Crop.find_by(slug: params[:crop_slug])
|
|
where['crop_id'] = @crop.id
|
|
end
|
|
|
|
if params[:planting_id].present?
|
|
@planting = Planting.find_by(slug: params[:planting_id])
|
|
where['parent_planting'] = @planting.id
|
|
end
|
|
|
|
where['tradeable_to'] = params[:tradeable_to] if params[:tradeable_to].present?
|
|
|
|
@show_all = (params[:all] == '1')
|
|
where['finished'] = false unless @show_all
|
|
|
|
@filename = csv_filename
|
|
@seeds = Seed.search(
|
|
where:,
|
|
page: params[:page],
|
|
limit: 30,
|
|
boost_by: [:created_at],
|
|
load: (request.format.csv? ? { include: %i(crop owner) } : false)
|
|
)
|
|
|
|
respond_with(@seeds)
|
|
end
|
|
|
|
def show
|
|
@photos = @seed.photos.includes(:owner).order(created_at: :desc, id: :desc).paginate(page: params[:page], per_page: 30)
|
|
respond_with(@seed)
|
|
end
|
|
|
|
def new
|
|
@seed = Seed.new
|
|
@seed.source = 'my own seed saving'
|
|
|
|
if params[:planting_slug]
|
|
@planting = Planting.find_by(slug: params[:planting_slug])
|
|
else
|
|
@crop = Crop.find_or_initialize_by(id: params[:crop_id])
|
|
end
|
|
respond_with(@seed)
|
|
end
|
|
|
|
def edit; end
|
|
|
|
def create
|
|
@seed = Seed.new(seed_params)
|
|
@seed.source ||= 'my own seed saving'
|
|
@seed.finished ||= false
|
|
@seed.owner = current_member
|
|
@seed.crop = @seed.parent_planting.crop if @seed.parent_planting
|
|
flash[:notice] = t('seeds.added_to_stash', crop: @seed.crop) if @seed.save
|
|
if params[:return] == 'planting'
|
|
respond_with(@seed, location: @seed.parent_planting)
|
|
else
|
|
respond_with(@seed)
|
|
end
|
|
end
|
|
|
|
def update
|
|
flash[:notice] = t('seeds.updated') if @seed.update(seed_params)
|
|
respond_with(@seed)
|
|
end
|
|
|
|
def destroy
|
|
@seed.destroy
|
|
respond_with(@seed)
|
|
end
|
|
|
|
private
|
|
|
|
def seed_params
|
|
params.require(:seed).permit(
|
|
:crop_id, :description, :quantity, :plant_before,
|
|
:parent_planting_id, :saved_at,
|
|
:days_until_maturity_min, :days_until_maturity_max,
|
|
:organic, :gmo, :source,
|
|
:heirloom, :tradable_to, :slug,
|
|
:finished, :finished_at
|
|
)
|
|
end
|
|
|
|
def csv_filename
|
|
if @owner
|
|
"Growstuff-#{@owner.to_param}-Seeds-#{Time.zone.now.to_fs(:number)}.csv"
|
|
else
|
|
"Growstuff-Seeds-#{Time.zone.now.to_fs(:number)}.csv"
|
|
end
|
|
end
|
|
end
|