From 1cdf5048c309203cd128e4d66a01e22358ac8a98 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 12 Sep 2024 01:18:04 +0200 Subject: [PATCH] Fix numbers autoincrement --- app/models/check.rb | 4 +++- app/views/checks/_form.html.slim | 2 +- .../20240911230623_change_checks_number_null_to_false.rb | 6 ++++++ db/schema.rb | 4 ++-- test/controllers/checks_controller_test.rb | 2 +- test/fixtures/checks.yml | 3 +++ 6 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20240911230623_change_checks_number_null_to_false.rb diff --git a/app/models/check.rb b/app/models/check.rb index d819d2b..7d2f061 100644 --- a/app/models/check.rb +++ b/app/models/check.rb @@ -52,7 +52,9 @@ class Check < ApplicationRecord :standard_text, :powerpoint_text - after_create { update(number: id) unless number } + validates :number, uniqueness: true, presence: true + + before_validation { self.number = self.class.maximum(:id).to_i + 1 unless self.number.present? } scope(:search, lambda { |term| # TODO: Search only fields for current locale. diff --git a/app/views/checks/_form.html.slim b/app/views/checks/_form.html.slim index cbdc5cc..1a21ea2 100644 --- a/app/views/checks/_form.html.slim +++ b/app/views/checks/_form.html.slim @@ -1,7 +1,7 @@ = bootstrap_form_with(model: check, remote: true) do |form| h2 Details = multilang_form_field(form, :name) - = form.text_field :number + = form.text_field :number, required: false .row = form.collection_radio_buttons(:principle_id, Principle.all.sort_by(&:t_name), :id, :t_name) { |b| b.label(class: "col-md-2") { b.radio_button + b.text } } = form.collection_check_boxes :standard_ids, Standard.all.sort_by{ _1.t_name.downcase }, :id, :t_name, include_blank: true diff --git a/db/migrate/20240911230623_change_checks_number_null_to_false.rb b/db/migrate/20240911230623_change_checks_number_null_to_false.rb new file mode 100644 index 0000000..a46cdd1 --- /dev/null +++ b/db/migrate/20240911230623_change_checks_number_null_to_false.rb @@ -0,0 +1,6 @@ +class ChangeChecksNumberNullToFalse < ActiveRecord::Migration[7.2] + def change + change_column :checks, :number, :bigint, null: false + change_column :checks, :external_url, :string, null: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 9f5849c..2427a10 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[7.2].define(version: 2024_08_30_134641) do +ActiveRecord::Schema[7.2].define(version: 2024_09_11_230623) do create_table "action_text_rich_texts", force: :cascade do |t| t.string "name", null: false t.text "body" @@ -73,7 +73,7 @@ ActiveRecord::Schema[7.2].define(version: 2024_08_30_134641) do t.integer "level" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.integer "number" + t.bigint "number", null: false t.string "name_de" t.string "name_en" t.boolean "visual", default: false, null: false diff --git a/test/controllers/checks_controller_test.rb b/test/controllers/checks_controller_test.rb index 4b3e44e..1a65af3 100644 --- a/test/controllers/checks_controller_test.rb +++ b/test/controllers/checks_controller_test.rb @@ -21,7 +21,7 @@ class ChecksControllerTest < ActionDispatch::IntegrationTest test "should create check" do assert_difference("Check.count") do post checks_url, - params: { check: { principle_id: @principle.id, level: @check.level, name_de: @check.name_de, position: @check.position, + params: { check: { principle_id: @principle.id, number: Check.maximum(:number) + 1, level: @check.level, name_de: @check.name_de, position: @check.position, criterion_de: @check.criterion_de } } end diff --git a/test/fixtures/checks.yml b/test/fixtures/checks.yml index 4a70959..a12326c 100644 --- a/test/fixtures/checks.yml +++ b/test/fixtures/checks.yml @@ -4,13 +4,16 @@ one: position: MyString name: MyString level: 1 + number: 1 two: position: MyString name: MyString level: 1 + number: 2 deletable: position: MyString name: MyString level: 1 + number: 3