`
+- Bad: `
`
+
## Related Files
When changing a model or controller, check whether these related files need updates:
diff --git a/app/controllers/admin/analytics_controller.rb b/app/controllers/admin/analytics_controller.rb
index aa390beaa..74c3fbd94 100644
--- a/app/controllers/admin/analytics_controller.rb
+++ b/app/controllers/admin/analytics_controller.rb
@@ -15,7 +15,7 @@ def index
@most_viewed_community_news = decorate_with_counts(most_viewed_for_model(CommunityNews, time_scope), :view_count)
@most_viewed_stories = decorate_with_counts(most_viewed_for_model(Story, time_scope), :view_count)
@most_viewed_quotes = decorate_with_counts(most_viewed_for_model(Quote, time_scope), :view_count)
- @most_viewed_tutorials = decorate_with_counts(most_viewed_for_model(Tutorial, time_scope), :view_count)
+ @most_viewed_video_recordings = decorate_with_counts(most_viewed_for_model(VideoRecording, time_scope), :view_count)
@most_viewed_organizations = decorate_with_counts(most_viewed_for_model(Organization, time_scope), :view_count)
@most_viewed_events = decorate_with_counts(most_viewed_for_model(Event, time_scope), :view_count)
@most_viewed_people = decorate_with_counts(most_viewed_for_model(Person, time_scope), :view_count)
@@ -26,7 +26,7 @@ def index
@most_printed_stories = decorate_with_counts(most_printed_for_model(Story, time_scope), :print_count)
# @most_printed_workshop_variations = decorate_with_counts(most_printed_for_model(WorkshopVariation, time_scope), :print_count)
# @most_printed_quotes = decorate_with_counts(most_printed_for_model(Quote, time_scope), :print_count)
- # @most_printed_tutorials = decorate_with_counts(most_printed_for_model(Tutorial, time_scope), :print_count)
+ # @most_printed_video_recordings = decorate_with_counts(most_printed_for_model(VideoRecording, time_scope), :print_count)
# @most_printed_organizations = decorate_with_counts(most_printed_for_model(Organization, time_scope), :print_count)
# @most_printed_events = decorate_with_counts(most_printed_for_model(Event, time_scope), :print_count)
@@ -68,9 +68,9 @@ def index
views: all_counts["view.quote"] || 0,
prints: all_counts["print.quote"] || 0
},
- tutorials: {
- views: all_counts["view.tutorial"] || 0,
- prints: all_counts["print.tutorial"] || 0
+ video_recordings: {
+ views: all_counts["view.video_recording"] || 0,
+ prints: all_counts["print.video_recording"] || 0
},
organizations: {
views: all_counts["view.organization"] || 0,
diff --git a/app/controllers/home/video_gallery_controller.rb b/app/controllers/home/video_gallery_controller.rb
deleted file mode 100644
index 8357fc504..000000000
--- a/app/controllers/home/video_gallery_controller.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module Home
- class VideoGalleryController < ApplicationController
- skip_before_action :authenticate_user!
-
- def index
- authorize! :home
- base = Tutorial.where.not(youtube_url: [ nil, "" ]).order(position: :asc, created_at: :desc)
- @tutorials = authorized_scope(base, with: HomePolicy).decorate
-
- render "home/video_gallery/index"
- end
- end
-end
diff --git a/app/controllers/home/video_recordings_controller.rb b/app/controllers/home/video_recordings_controller.rb
new file mode 100644
index 000000000..8dc309022
--- /dev/null
+++ b/app/controllers/home/video_recordings_controller.rb
@@ -0,0 +1,13 @@
+module Home
+ class VideoRecordingsController < ApplicationController
+ skip_before_action :authenticate_user!
+
+ def index
+ authorize! :home
+ base = VideoRecording.where.not(youtube_url: [ nil, "" ]).order(position: :asc, created_at: :desc)
+ @video_recordings = authorized_scope(base, with: HomePolicy).decorate
+
+ render "home/video_recordings/index"
+ end
+ end
+end
diff --git a/app/controllers/taggings_controller.rb b/app/controllers/taggings_controller.rb
index 9599e0f9a..e0912ff8b 100644
--- a/app/controllers/taggings_controller.rb
+++ b/app/controllers/taggings_controller.rb
@@ -16,7 +16,7 @@ def index
people: params[:people_page],
organizations: params[:organizations_page],
quotes: params[:quotes_page],
- tutorials: params[:tutorials_page]
+ video_recordings: params[:video_recordings_page]
}
@grouped_tagged_items = TaggingSearchService.call(
diff --git a/app/controllers/tutorials_controller.rb b/app/controllers/tutorials_controller.rb
deleted file mode 100644
index b6e2ddd15..000000000
--- a/app/controllers/tutorials_controller.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-class TutorialsController < ApplicationController
- include AhoyTracking, TagAssignable
- skip_before_action :authenticate_user!, only: [ :index, :show ]
- before_action :set_tutorial, only: [ :show, :edit, :update, :destroy ]
-
- def index
- authorize!
- if turbo_frame_request?
- per_page = params[:number_of_items_per_page].presence || 6
- base_scope = authorized_scope(Tutorial.includes(:bookmarks))
- filtered = base_scope.search_by_params(params)
-
- @count_display = filtered.size == base_scope.size ? base_scope.size : "#{filtered.count}/#{base_scope.count}"
- @tutorials = filtered.order(:position).paginate(page: params[:page], per_page: per_page).decorate
-
- render :index_lazy
- else
- @sectors = Sector.published.order(:name)
- @category_types = CategoryType.published.general.order(:name).decorate
-
- render :index
- end
- end
-
- def show
- @tutorial = @tutorial.decorate
- authorize! @tutorial
- track_view(@tutorial)
- end
-
- def new
- @tutorial = Tutorial.new.decorate
- authorize! @tutorial
- set_form_variables
- end
-
- def edit
- @tutorial = @tutorial.decorate
- authorize! @tutorial
- set_form_variables
- end
-
- def create
- @tutorial = Tutorial.new(tutorial_params)
- authorize! @tutorial
-
- success = false
-
- Tutorial.transaction do
- if @tutorial.save
- assign_associations(@tutorial)
- success = true
- end
- rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved, ActiveRecord::RecordNotUnique => e
- Rails.logger.error "Tutorial create failed: #{e.class} - #{e.message}"
- raise ActiveRecord::Rollback
- end
-
- if success
- redirect_to @tutorial, notice: "Video was successfully created."
- else
- @tutorial = @tutorial.decorate
- set_form_variables
- render :new, status: :unprocessable_content
- end
- end
-
- def update
- authorize! @tutorial
-
- success = false
-
- Tutorial.transaction do
- if @tutorial.update(tutorial_params)
- assign_associations(@tutorial)
- success = true
- end
- rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved, ActiveRecord::RecordNotUnique => e
- Rails.logger.error "Tutorial update failed: #{e.class} - #{e.message}"
- raise ActiveRecord::Rollback
- end
-
- if success
- redirect_to @tutorial, notice: "Video was successfully updated.", status: :see_other
- else
- @tutorial = @tutorial.decorate
- set_form_variables
- render :edit, status: :unprocessable_content
- end
- end
-
- def destroy
- authorize! @tutorial
- @tutorial.destroy!
- redirect_to tutorials_path, notice: "Video was successfully destroyed."
- end
-
- # Optional hooks for setting variables for forms or index
- def set_form_variables
- @tutorial.build_primary_asset if @tutorial.primary_asset.blank?
- @tutorial.gallery_assets.build
- @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 }
- @sectors = Sector.published.order(:name)
- end
-
- private
-
- def set_tutorial
- @tutorial = Tutorial.find(params[:id])
- end
-
- # Strong parameters
- def tutorial_params
- params.require(:tutorial).permit(
- :title, :body, :rhino_body, :position, :youtube_url,
- :featured, :published, :publicly_visible, :publicly_featured,
- category_ids: [],
- sector_ids: [],
- primary_asset_attributes: [ :id, :file, :_destroy ],
- gallery_assets_attributes: [ :id, :file, :_destroy ],
- )
- end
-end
diff --git a/app/controllers/video_recordings_controller.rb b/app/controllers/video_recordings_controller.rb
new file mode 100644
index 000000000..c057911bb
--- /dev/null
+++ b/app/controllers/video_recordings_controller.rb
@@ -0,0 +1,143 @@
+class VideoRecordingsController < ApplicationController
+ include AhoyTracking, TagAssignable
+ skip_before_action :authenticate_user!, only: [ :index, :show ]
+ before_action :set_video_recording, only: [ :show, :edit, :update, :destroy ]
+
+ def index
+ authorize!
+ @video_type = params[:video_type].presence || "other"
+
+ if turbo_frame_request?
+ per_page = params[:number_of_items_per_page].presence || 6
+ base_scope = filter_by_video_type(authorized_scope(VideoRecording.all))
+ filtered = base_scope.search_by_params(params)
+
+ @count_display = filtered.size == base_scope.size ? base_scope.size : "#{filtered.count}/#{base_scope.count}"
+ @video_recordings = filtered.order(:position).paginate(page: params[:page], per_page: per_page).decorate
+
+ render :index_lazy
+ else
+ @sectors = Sector.published.order(:name)
+ @category_types = CategoryType.published.general.order(:name).decorate
+
+ render :index
+ end
+ end
+
+ def show
+ @video_recording = @video_recording.decorate
+ authorize! @video_recording
+ track_view(@video_recording)
+ end
+
+ def new
+ @video_recording = VideoRecording.new.decorate
+ authorize! @video_recording
+ set_form_variables
+ end
+
+ def edit
+ @video_recording = @video_recording.decorate
+ authorize! @video_recording
+ set_form_variables
+ end
+
+ def create
+ @video_recording = VideoRecording.new(video_recording_params)
+ authorize! @video_recording
+
+ success = false
+
+ VideoRecording.transaction do
+ if @video_recording.save
+ assign_associations(@video_recording)
+ success = true
+ end
+ rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved => e
+ Rails.logger.error "VideoRecording create failed: #{e.class} - #{e.message}"
+ raise ActiveRecord::Rollback
+ end
+
+ if success
+ redirect_to @video_recording, notice: "#{VideoRecording.model_name.human} was successfully created."
+ else
+ @video_recording = @video_recording.decorate
+ set_form_variables
+ render :new, status: :unprocessable_content
+ end
+ end
+
+ def update
+ authorize! @video_recording
+
+ success = false
+
+ VideoRecording.transaction do
+ if @video_recording.update(video_recording_params)
+ assign_associations(@video_recording)
+ success = true
+ end
+ rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved => e
+ Rails.logger.error "VideoRecording update failed: #{e.class} - #{e.message}"
+ raise ActiveRecord::Rollback
+ end
+
+ if success
+ redirect_to @video_recording, notice: "#{VideoRecording.model_name.human} was successfully updated.", status: :see_other
+ else
+ @video_recording = @video_recording.decorate
+ set_form_variables
+ render :edit, status: :unprocessable_content
+ end
+ end
+
+ def destroy
+ authorize! @video_recording
+ @video_recording.destroy!
+ redirect_to video_recordings_path, notice: "#{VideoRecording.model_name.human} was successfully destroyed."
+ end
+
+ # Optional hooks for setting variables for forms or index
+ def set_form_variables
+ @video_recording.build_primary_asset if @video_recording.primary_asset.blank?
+ @video_recording.gallery_assets.build
+ @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 }
+ @sectors = Sector.published.order(:name)
+ end
+
+ private
+
+ def set_video_recording
+ @video_recording = VideoRecording.find(params[:id])
+ end
+
+ def filter_by_video_type(scope)
+ case @video_type
+ when "instructional"
+ scope.instructional
+ when "other"
+ scope.where(is_instructional: false)
+ else
+ scope
+ end
+ end
+
+ # Strong parameters
+ def video_recording_params
+ params.require(:video_recording).permit(
+ :title, :body, :rhino_body, :position, :youtube_url, :is_instructional, :is_podcast,
+ :featured, :published, :publicly_visible, :publicly_featured,
+ category_ids: [],
+ sector_ids: [],
+ primary_asset_attributes: [ :id, :file, :_destroy ],
+ gallery_assets_attributes: [ :id, :file, :_destroy ],
+ )
+ end
+end
diff --git a/app/decorators/tutorial_decorator.rb b/app/decorators/video_recording_decorator.rb
similarity index 71%
rename from app/decorators/tutorial_decorator.rb
rename to app/decorators/video_recording_decorator.rb
index ca7981746..430eee4f5 100644
--- a/app/decorators/tutorial_decorator.rb
+++ b/app/decorators/video_recording_decorator.rb
@@ -1,4 +1,4 @@
-class TutorialDecorator < ApplicationDecorator
+class VideoRecordingDecorator < ApplicationDecorator
delegate_all
def detail(length: nil)
diff --git a/app/helpers/admin_cards_helper.rb b/app/helpers/admin_cards_helper.rb
index 8c66b2dfc..5856b9cf5 100644
--- a/app/helpers/admin_cards_helper.rb
+++ b/app/helpers/admin_cards_helper.rb
@@ -13,7 +13,7 @@ def system_cards
custom_card("Tagging counts", taggings_matrix_path, icon: "🧮", color: :lime),
model_card(:workshops, icon: "🎨"),
model_card(:workshop_variations, icon: "🔀"),
- model_card(:tutorials, icon: "🎬", title: "Video Gallery"),
+ model_card(:video_recordings, icon: "🎬", title: "Video Gallery"),
model_card(:banners, icon: "📣"),
model_card(:community_news, icon: "📰"),
model_card(:faqs, icon: "❔", title: "FAQs")
diff --git a/app/models/bookmark.rb b/app/models/bookmark.rb
index fa8b4da61..8fbd6c263 100644
--- a/app/models/bookmark.rb
+++ b/app/models/bookmark.rb
@@ -2,8 +2,8 @@ class Bookmark < ApplicationRecord
belongs_to :user
belongs_to :bookmarkable, polymorphic: true
- BOOKMARKABLE_MODELS = %w[CommunityNews Event Faq Organization Person Report Resource Story StoryIdea
- Tutorial Workshop WorkshopIdea WorkshopLog WorkshopVariation WorkshopVariationIdea].freeze
+ BOOKMARKABLE_MODELS = %w[CommunityNews Event Organization Person Report Resource Story StoryIdea
+ VideoRecording Workshop WorkshopIdea WorkshopLog WorkshopVariation WorkshopVariationIdea].freeze
DROPDOWN_MODELS = (BOOKMARKABLE_MODELS - %w[Report]).freeze
@@ -68,7 +68,7 @@ def self.sort_by_title
LEFT JOIN resources AS st_res ON st_res.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'Resource'
LEFT JOIN stories AS st_st ON st_st.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'Story'
LEFT JOIN story_ideas AS st_si ON st_si.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'StoryIdea'
- LEFT JOIN tutorials AS st_tut ON st_tut.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'Tutorial'
+ LEFT JOIN video_recordings AS st_vr ON st_vr.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'VideoRecording'
LEFT JOIN workshops AS st_ws ON st_ws.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'Workshop'
LEFT JOIN workshop_ideas AS st_wi ON st_wi.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'WorkshopIdea'
LEFT JOIN workshop_logs AS st_wl ON st_wl.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'WorkshopLog'
@@ -88,7 +88,7 @@ def self.sort_by_title
st_res.title,
st_st.title,
st_si.title,
- st_tut.title,
+ st_vr.title,
st_ws.title,
st_wi.title,
DATE_FORMAT(st_wl.date, '%Y-%m-%d'),
@@ -114,7 +114,7 @@ def self.title(title)
LEFT JOIN resources ON resources.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'Resource'
LEFT JOIN stories ON stories.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'Story'
LEFT JOIN story_ideas ON story_ideas.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'StoryIdea'
- LEFT JOIN tutorials ON tutorials.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'Tutorial'
+ LEFT JOIN video_recordings ON video_recordings.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'VideoRecording'
LEFT JOIN workshops ON workshops.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'Workshop'
LEFT JOIN workshop_ideas ON workshop_ideas.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'WorkshopIdea'
LEFT JOIN workshop_logs ON workshop_logs.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'WorkshopLog'
@@ -129,7 +129,7 @@ def self.title(title)
reports.type LIKE :title OR
stories.title LIKE :title OR workshops.title LIKE :title OR workshop_ideas.title LIKE :title OR
story_ideas.body LIKE :title OR -- searching body for story ideas (title exists but isn't used in UI)
- tutorials.title LIKE :title OR
+ video_recordings.title LIKE :title OR
DATE_FORMAT(workshop_logs.date, '%Y-%m-%d') LIKE :title OR -- no title on workshop_logs
workshop_variations.name LIKE :title OR
workshop_variation_ideas.name LIKE :title",
diff --git a/app/models/tag.rb b/app/models/tag.rb
index 6d2bc6b62..61c4125dc 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -40,10 +40,10 @@ class Tag
path: -> { Rails.application.routes.url_helpers.quotes_path },
klass: Quote
},
- tutorials: {
+ video_recordings: {
icon: "🎬",
- path: -> { Rails.application.routes.url_helpers.tutorials_path },
- klass: Tutorial
+ path: -> { Rails.application.routes.url_helpers.video_recordings_path },
+ klass: VideoRecording
}
}.freeze
diff --git a/app/models/user.rb b/app/models/user.rb
index 170d0f2e8..791afc8f1 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -49,7 +49,7 @@ class User < ApplicationRecord
has_many :bookmarked_workshops, through: :bookmarks, source: :bookmarkable, source_type: "Workshop"
has_many :bookmarked_resources, through: :bookmarks, source: :bookmarkable, source_type: "Resource"
has_many :bookmarked_events, through: :bookmarks, source: :bookmarkable, source_type: "Event"
- has_many :bookmarked_tutorials, through: :bookmarks, source: :bookmarkable, source_type: "Tutorial"
+ has_many :bookmarked_video_recordings, through: :bookmarks, source: :bookmarkable, source_type: "VideoRecording"
has_many :events, through: :event_registrations
has_many :organizations, through: :person
diff --git a/app/models/tutorial.rb b/app/models/video_recording.rb
similarity index 89%
rename from app/models/tutorial.rb
rename to app/models/video_recording.rb
index 9697ceca5..e99625ab2 100644
--- a/app/models/tutorial.rb
+++ b/app/models/video_recording.rb
@@ -1,4 +1,4 @@
-class Tutorial < ApplicationRecord
+class VideoRecording < ApplicationRecord
include Featureable, Publishable, TagFilterable, Trendable, RichTextSearchable
has_rich_text :rhino_body
@@ -16,6 +16,7 @@ class Tutorial < ApplicationRecord
has_many :assets, as: :owner, dependent: :destroy
validates :title, presence: true, uniqueness: { case_sensitive: false }
+ validates :youtube_url, presence: true
# Nested attributes
accepts_nested_attributes_for :primary_asset, reject_if: :all_blank, allow_destroy: true
@@ -34,7 +35,7 @@ class Tutorial < ApplicationRecord
scope :body, ->(body) {
left_joins(:rich_text_rhino_body)
- .where("tutorials.body LIKE :q OR action_text_rich_texts.body LIKE :q", q: "%#{body}%")
+ .where("video_recordings.body LIKE :q OR action_text_rich_texts.plain_text_body LIKE :q", q: "%#{body}%")
}
scope :title, ->(title) { where("title like ?", "%#{ title }%") }
scope :tutorial_name, ->(tutorial_name) { title(tutorial_name) }
@@ -42,7 +43,7 @@ class Tutorial < ApplicationRecord
ids = Array(sector_ids).reject(&:blank?).map(&:to_i)
return all if ids.empty?
joins(:sectorable_items)
- .where(sectorable_items: { sectorable_type: "Tutorial", sector_id: ids })
+ .where(sectorable_items: { sectorable_type: "VideoRecording", sector_id: ids })
.distinct
}
@@ -50,7 +51,7 @@ class Tutorial < ApplicationRecord
ids = Array(category_ids).reject(&:blank?).map(&:to_i)
return all if ids.empty?
joins(:categorizable_items)
- .where(categorizable_items: { categorizable_type: "Tutorial", category_id: ids })
+ .where(categorizable_items: { categorizable_type: "VideoRecording", category_id: ids })
.distinct
}
diff --git a/app/policies/tutorial_policy.rb b/app/policies/video_recording_policy.rb
similarity index 90%
rename from app/policies/tutorial_policy.rb
rename to app/policies/video_recording_policy.rb
index c42ab17c9..24d6136e4 100644
--- a/app/policies/tutorial_policy.rb
+++ b/app/policies/video_recording_policy.rb
@@ -1,4 +1,4 @@
-class TutorialPolicy < ApplicationPolicy
+class VideoRecordingPolicy < ApplicationPolicy
# See https://actionpolicy.evilmartians.io/#/writing_policies
#
def index?
diff --git a/app/services/tagging_search_service.rb b/app/services/tagging_search_service.rb
index df11d925f..63550ffb6 100644
--- a/app/services/tagging_search_service.rb
+++ b/app/services/tagging_search_service.rb
@@ -79,13 +79,13 @@ def self.call(sector_names_all:, category_names_all: nil,
.paginate(page: pages[:quotes] || 1, per_page: number_of_items_per_page)
.decorate,
- tutorials: Tutorial
+ video_recordings: VideoRecording
.includes(:sectors, :categories, :primary_asset, :gallery_assets)
.published
.sector_names_all(sector_names_all)
.category_names_all(category_names_all)
.order(:position, :title)
- .paginate(page: pages[:tutorials] || 1, per_page: number_of_items_per_page)
+ .paginate(page: pages[:video_recordings] || 1, per_page: number_of_items_per_page)
.decorate
}
end
diff --git a/app/views/admin/analytics/index.html.erb b/app/views/admin/analytics/index.html.erb
index 7b0ab7921..5fa53428d 100644
--- a/app/views/admin/analytics/index.html.erb
+++ b/app/views/admin/analytics/index.html.erb
@@ -209,11 +209,11 @@
%>
<%= render "admin/analytics/popular_list",
- title: Tutorial.model_name.human(count: 2),
- records: @most_viewed_tutorials,
- path_method: :tutorial_path,
+ title: VideoRecording.model_name.human(count: 2),
+ records: @most_viewed_video_recordings,
+ path_method: :video_recording_path,
metric: :view_count,
- color: :tutorials
+ color: :videos
%>
diff --git a/app/views/home/_video_gallery.html.erb b/app/views/home/_video_recordings.html.erb
similarity index 61%
rename from app/views/home/_video_gallery.html.erb
rename to app/views/home/_video_recordings.html.erb
index f13e1cc95..985b24052 100644
--- a/app/views/home/_video_gallery.html.erb
+++ b/app/views/home/_video_recordings.html.erb
@@ -1,4 +1,4 @@
-<% title ||= "Video Gallery" %>
+<% title ||= "Videos" %>