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 @@