From e9414e360f43b498d38a9d751f5ba8f77b547504 Mon Sep 17 00:00:00 2001 From: Nicolas Bettenburg Date: Fri, 20 Oct 2023 09:32:49 -0400 Subject: [PATCH] Fix NoMethodError on Rails 7.x When attempting to run `rails g rails_settings:migration` in a Rails `7.x` project, the generator fails with a `NoMethodError` out of `activerecord-7.1.0/lib/active_record/dynamic_matchers.rb:22` The `timestamped_migrations` method was moved from `ActiveRecord::Base` to `ActiveRecord` in the `7.x` branch, see https://github.com/rails/rails/commit/bcd6c0f3d03500bfc4c0c9830302d5ad54c2c81d --- .../rails_settings/migration/migration_generator.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/generators/rails_settings/migration/migration_generator.rb b/lib/generators/rails_settings/migration/migration_generator.rb index a901d48..bb8a95e 100644 --- a/lib/generators/rails_settings/migration/migration_generator.rb +++ b/lib/generators/rails_settings/migration/migration_generator.rb @@ -14,11 +14,16 @@ def create_migration_file end def self.next_migration_number(dirname) - if ActiveRecord::Base.timestamped_migrations + if timestamped_migrations? Time.now.utc.strftime('%Y%m%d%H%M%S') else '%.3d' % (current_migration_number(dirname) + 1) end end + + def self.timestamped_migrations? + (ActiveRecord::Base.respond_to?(:timestamped_migrations) && ActiveRecord::Base.timestamped_migrations) || + (ActiveRecord.respond_to?(:timestamped_migrations) && ActiveRecord.timestamped_migrations) + end end end