From 6ff97f3e9f946e25a6f326df991dbafa1e208ca9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 15 Feb 2026 14:34:46 +0000 Subject: [PATCH 1/6] Initial plan From 6568096407618927a499014361091782ba9e5eb9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 15 Feb 2026 14:38:54 +0000 Subject: [PATCH 2/6] Add tags section to story ideas form with categories Co-authored-by: maebeale <7607813+maebeale@users.noreply.github.com> --- app/controllers/story_ideas_controller.rb | 21 +++++++- app/views/story_ideas/_form.html.erb | 64 +++++++++++++++++++++++ 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/app/controllers/story_ideas_controller.rb b/app/controllers/story_ideas_controller.rb index b2f674f91..8bd5e5dd7 100644 --- a/app/controllers/story_ideas_controller.rb +++ b/app/controllers/story_ideas_controller.rb @@ -36,6 +36,7 @@ def create authorize! @story_idea if @story_idea.save + assign_associations(@story_idea) NotificationServices::CreateNotification.call( noticeable: @story_idea, kind: :idea_submitted_fyi, @@ -60,6 +61,7 @@ def update authorize! @story_idea if @story_idea.update(story_idea_params.except(:images)) + assign_associations(@story_idea) flash[:notice] = "StoryIdea was successfully updated." if allowed_to?(:index?, StoryIdea) redirect_to story_ideas_path, status: :see_other @@ -90,10 +92,25 @@ def set_form_variables @users = User.active.includes(:person) @users = @users.or(User.where(id: @story_idea.created_by_id)) if @story_idea&.created_by_id @users = @users.distinct.order("people.first_name, people.last_name") + @categories_grouped = + Category + .includes(:category_type) + .published + .order(:position, :name) + .group_by(&:category_type) + .select { |type, _| type.nil? || type.published? } + .sort_by { |type, _| type&.name.to_s.downcase } @story_idea.build_primary_asset if @story_idea.primary_asset.blank? @story_idea.gallery_assets.build end + def assign_associations(story_idea) + selected_category_ids = Array(params[:story_idea][:category_ids]).reject(&:blank?).map(&:to_i) + story_idea.categories = Category.where(id: selected_category_ids) + + story_idea.save! + end + private def set_story_idea @@ -107,10 +124,10 @@ def story_idea_params :windows_type_id, :organization_id, :workshop_id, :external_workshop_title, :created_by_id, :updated_by_id, story_populations: [], + category_ids: [], primary_asset_attributes: [ :id, :file, :_destroy ], gallery_assets_attributes: [ :id, :file, :_destroy ], - categorizable_items_attributes: [ :id, :category_id, :_destroy ], - category_ids: [] + categorizable_items_attributes: [ :id, :category_id, :_destroy ] ) end end diff --git a/app/views/story_ideas/_form.html.erb b/app/views/story_ideas/_form.html.erb index f2c04b8c1..6eb05a41e 100644 --- a/app/views/story_ideas/_form.html.erb +++ b/app/views/story_ideas/_form.html.erb @@ -155,6 +155,70 @@ <% end %> + + +
+
+ + + +
+
+ <%= render "shared/form_image_fields", f: f, include_primary_asset: true %>
<% if allowed_to?(:destroy?, f.object) && f.object.stories.none? %> From a96d3e5a0a248da2562f6f1abe03c881db336ef5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 15 Feb 2026 14:39:58 +0000 Subject: [PATCH 3/6] Address code review feedback - optimize category assignment Co-authored-by: maebeale <7607813+maebeale@users.noreply.github.com> --- app/controllers/story_ideas_controller.rb | 10 +++++----- app/views/story_ideas/_form.html.erb | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/story_ideas_controller.rb b/app/controllers/story_ideas_controller.rb index 8bd5e5dd7..4f14f5667 100644 --- a/app/controllers/story_ideas_controller.rb +++ b/app/controllers/story_ideas_controller.rb @@ -35,8 +35,9 @@ def create @story_idea.updated_by = current_user authorize! @story_idea + assign_categories(@story_idea) + if @story_idea.save - assign_associations(@story_idea) NotificationServices::CreateNotification.call( noticeable: @story_idea, kind: :idea_submitted_fyi, @@ -60,8 +61,9 @@ def update @story_idea.updated_by = current_user authorize! @story_idea + assign_categories(@story_idea) + if @story_idea.update(story_idea_params.except(:images)) - assign_associations(@story_idea) flash[:notice] = "StoryIdea was successfully updated." if allowed_to?(:index?, StoryIdea) redirect_to story_ideas_path, status: :see_other @@ -104,11 +106,9 @@ def set_form_variables @story_idea.gallery_assets.build end - def assign_associations(story_idea) + def assign_categories(story_idea) selected_category_ids = Array(params[:story_idea][:category_ids]).reject(&:blank?).map(&:to_i) story_idea.categories = Category.where(id: selected_category_ids) - - story_idea.save! end private diff --git a/app/views/story_ideas/_form.html.erb b/app/views/story_ideas/_form.html.erb index 6eb05a41e..01c0277ae 100644 --- a/app/views/story_ideas/_form.html.erb +++ b/app/views/story_ideas/_form.html.erb @@ -200,7 +200,7 @@ flex items-center gap-2 p-3 cursor-pointer w-auto min-w-[180px] bg-white border border-gray-200 rounded-lg shadow-sm hover:bg-gray-100 transition"> <%= hidden_field_tag "story_idea[category_ids][]", "" %> - + <%= check_box_tag "story_idea[category_ids][]", category.id, @story_idea.category_ids.include?(category.id), From e27aa244a8fd0bc18e8da09b8a0afca6ea91d38f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 15 Feb 2026 14:41:43 +0000 Subject: [PATCH 4/6] Add sectors support to story ideas tags section Co-authored-by: maebeale <7607813+maebeale@users.noreply.github.com> --- app/controllers/story_ideas_controller.rb | 18 ++++++++----- app/models/story_idea.rb | 2 ++ app/views/story_ideas/_form.html.erb | 32 ++++++++++++++++++++++- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/app/controllers/story_ideas_controller.rb b/app/controllers/story_ideas_controller.rb index 4f14f5667..296feba3f 100644 --- a/app/controllers/story_ideas_controller.rb +++ b/app/controllers/story_ideas_controller.rb @@ -102,21 +102,25 @@ def set_form_variables .group_by(&:category_type) .select { |type, _| type.nil? || type.published? } .sort_by { |type, _| type&.name.to_s.downcase } + @sectors = Sector.published.order(:name) @story_idea.build_primary_asset if @story_idea.primary_asset.blank? @story_idea.gallery_assets.build end - def assign_categories(story_idea) - selected_category_ids = Array(params[:story_idea][:category_ids]).reject(&:blank?).map(&:to_i) - story_idea.categories = Category.where(id: selected_category_ids) - end - private def set_story_idea @story_idea = StoryIdea.find(params[:id]) end + def assign_categories(story_idea) + selected_category_ids = Array(params[:story_idea][:category_ids]).reject(&:blank?).map(&:to_i) + story_idea.categories = Category.where(id: selected_category_ids) + + selected_sector_ids = Array(params[:story_idea][:sector_ids]).reject(&:blank?).map(&:to_i) + story_idea.sectors = Sector.where(id: selected_sector_ids) + end + def story_idea_params params.require(:story_idea).permit( :title, :body, :youtube_url, @@ -125,9 +129,9 @@ def story_idea_params :created_by_id, :updated_by_id, story_populations: [], category_ids: [], + sector_ids: [], primary_asset_attributes: [ :id, :file, :_destroy ], - gallery_assets_attributes: [ :id, :file, :_destroy ], - categorizable_items_attributes: [ :id, :category_id, :_destroy ] + gallery_assets_attributes: [ :id, :file, :_destroy ] ) end end diff --git a/app/models/story_idea.rb b/app/models/story_idea.rb index 1feb094db..c7a15c8f5 100644 --- a/app/models/story_idea.rb +++ b/app/models/story_idea.rb @@ -12,6 +12,7 @@ class StoryIdea < ApplicationRecord belongs_to :workshop, optional: true has_many :bookmarks, as: :bookmarkable, dependent: :destroy has_many :categorizable_items, dependent: :destroy, inverse_of: :categorizable, as: :categorizable + has_many :sectorable_items, dependent: :destroy, inverse_of: :sectorable, as: :sectorable has_many :notifications, as: :noticeable, dependent: :destroy has_many :stories # Asset associations @@ -22,6 +23,7 @@ class StoryIdea < ApplicationRecord has_many :assets, as: :owner, dependent: :destroy # has_many through has_many :categories, through: :categorizable_items + has_many :sectors, through: :sectorable_items # Validations validates :created_by_id, presence: true diff --git a/app/views/story_ideas/_form.html.erb b/app/views/story_ideas/_form.html.erb index 01c0277ae..83112c58c 100644 --- a/app/views/story_ideas/_form.html.erb +++ b/app/views/story_ideas/_form.html.erb @@ -183,7 +183,38 @@