diff --git a/db/migrate/20250407093421_make_tag_titles_unique_per_account.rb b/db/migrate/20250407093421_make_tag_titles_unique_per_account.rb new file mode 100644 index 000000000..bc9f17a7c --- /dev/null +++ b/db/migrate/20250407093421_make_tag_titles_unique_per_account.rb @@ -0,0 +1,5 @@ +class MakeTagTitlesUniquePerAccount < ActiveRecord::Migration[8.1] + def change + add_index :tags, [ :account_id, :title ], unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index d93de5dac..db3e5ac8d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2025_04_04_133310) do +ActiveRecord::Schema[8.1].define(version: 2025_04_07_093421) do create_table "accesses", force: :cascade do |t| t.integer "bucket_id", null: false t.datetime "created_at", null: false @@ -287,6 +287,7 @@ ActiveRecord::Schema[8.1].define(version: 2025_04_04_133310) do t.datetime "created_at", null: false t.string "title" t.datetime "updated_at", null: false + t.index ["account_id", "title"], name: "index_tags_on_account_id_and_title", unique: true t.index ["account_id"], name: "index_tags_on_account_id" end diff --git a/db/schema_cache.yml b/db/schema_cache.yml index a0107d289..64906dbd4 100644 --- a/db/schema_cache.yml +++ b/db/schema_cache.yml @@ -50,26 +50,6 @@ columns: default_function: collation: comment: - - &9 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column - auto_increment: - name: updated_at - cast_type: *3 - sql_type_metadata: *4 - 'null': false - default: - default_function: - collation: - comment: - - &30 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column - auto_increment: - name: user_id - cast_type: *1 - sql_type_metadata: *2 - 'null': false - default: - default_function: - collation: - comment: - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column auto_increment: name: involvement @@ -90,6 +70,26 @@ columns: default_function: collation: comment: + - &9 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column + auto_increment: + name: updated_at + cast_type: *3 + sql_type_metadata: *4 + 'null': false + default: + default_function: + collation: + comment: + - &30 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column + auto_increment: + name: user_id + cast_type: *1 + sql_type_metadata: *2 + 'null': false + default: + default_function: + collation: + comment: accounts: - *5 - *6 @@ -468,6 +468,16 @@ columns: default_function: collation: comment: + - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column + auto_increment: + name: last_active_at + cast_type: *3 + sql_type_metadata: *4 + 'null': true + default: + default_function: + collation: + comment: - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column auto_increment: name: stage_id @@ -499,16 +509,6 @@ columns: collation: comment: - *9 - - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column - auto_increment: - name: last_active_at - cast_type: *3 - sql_type_metadata: *4 - 'null': false - default: - default_function: - collation: - comment: buckets: - *5 - &32 !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column @@ -760,6 +760,7 @@ columns: default_function: collation: comment: + - *6 - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column auto_increment: name: label @@ -770,12 +771,21 @@ columns: default_function: collation: comment: - - *6 - *9 pops: - *5 - *25 - *6 + - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column + auto_increment: + name: reason + cast_type: *7 + sql_type_metadata: *8 + 'null': false + default: + default_function: + collation: + comment: - *9 - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column auto_increment: @@ -787,16 +797,6 @@ columns: default_function: collation: comment: - - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column - auto_increment: - name: reason - cast_type: *7 - sql_type_metadata: *8 - 'null': false - default: - default_function: - collation: - comment: reactions: - *5 - !ruby/object:ActiveRecord::ConnectionAdapters::SQLite3::Column @@ -1354,11 +1354,10 @@ indexes: bubbles: - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition table: bubbles - name: index_bubbles_on_last_active_at_and_status + name: index_bubbles_on_stage_id unique: false columns: - - last_active_at - - status + - stage_id lengths: {} orders: {} opclasses: {} @@ -1371,10 +1370,11 @@ indexes: valid: true - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition table: bubbles - name: index_bubbles_on_stage_id + name: index_bubbles_on_last_active_at_and_status unique: false columns: - - stage_id + - last_active_at + - status lengths: {} orders: {} opclasses: {} @@ -1991,6 +1991,23 @@ indexes: comment: valid: true tags: + - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition + table: tags + name: index_tags_on_account_id_and_title + unique: true + columns: + - account_id + - title + lengths: {} + orders: {} + opclasses: {} + where: + type: + using: + include: + nulls_not_distinct: + comment: + valid: true - !ruby/object:ActiveRecord::ConnectionAdapters::IndexDefinition table: tags name: index_tags_on_account_id @@ -2123,4 +2140,4 @@ indexes: nulls_not_distinct: comment: valid: true -version: 20250404133310 +version: 20250407093421 diff --git a/test/models/bubble/taggable_test.rb b/test/models/bubble/taggable_test.rb index c51e27e81..b189337aa 100644 --- a/test/models/bubble/taggable_test.rb +++ b/test/models/bubble/taggable_test.rb @@ -16,12 +16,4 @@ class Bubble::TaggableTest < ActiveSupport::TestCase @bubble.toggle_tag_with "ruby" end end - - test "ignore case when toggling tags" do - @bubble.toggle_tag_with "ruby" - - assert_difference -> { @bubble.tags.count }, -1 do - @bubble.toggle_tag_with "Ruby" - end - end end