Friendly urls for tracks

Don't use tracks ids in urls
Add short_name to tracks and use that in urls as the identifier
This commit is contained in:
AEtherC0r3 2017-06-29 23:39:56 +03:00 committed by Antonios Eleftheriadis
parent 882a1d20c9
commit 95fbd10153
9 changed files with 61 additions and 8 deletions

View file

@ -0,0 +1,39 @@
class AddShortNameToTracks < ActiveRecord::Migration
class TmpProgram < ActiveRecord::Base
self.table_name = 'programs'
end
class TmpTrack < ActiveRecord::Base
self.table_name = 'tracks'
end
def change
add_column :tracks, :short_name, :string
TmpTrack.reset_column_information
TmpProgram.find_each do |program|
# Keeps count of how many times we've encountered a short_name
track_name_counter = {}
TmpTrack.where(program_id: program.id).find_each do |track|
# Replace spaces with undercores and remove the non alphanumeric characters that aren't underscores or dashes
short_name = track.name.tr(' ', '_').tr('^a-zA-Z0-9_-', '')
# If we've seen that short_name before then add the counter in the end to avoid collisions
if track_name_counter[short_name]
track_name_counter[short_name] += 1
short_name += "_#{track_name_counter[short_name]}"
else
# Initialize the counter
track_name_counter[short_name] = 0 unless track_name_counter[short_name]
end
track.short_name = short_name
track.save!
end
end
change_column_null :tracks, :short_name, false
end
end

View file

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170603095900) do
ActiveRecord::Schema.define(version: 20170629162450) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -485,6 +485,7 @@ ActiveRecord::Schema.define(version: 20170603095900) do
t.datetime "created_at"
t.datetime "updated_at"
t.integer "program_id"
t.string "short_name", null: false
end
create_table "users", force: :cascade do |t|