Here is another way to learn more about the aforementioned save method by using the Rails console and iterating through Product.ancestors looking for a save method.
At the top of the output, we can see the (short) list of Product’s ancestors that define a save method. Further down below, we see a long list of 82 ancestor entries that is essentially the reverse list of includes found in the ActiveRecord::Base sources, along with some additional ancestors not defined by ActiveRecord::Base.
$ bin/rails console
app(dev)? Product.ancestors.each do |mod|
app(dev)? puts "#{mod} defines save at #{mod.instance_method(:save).source_location}" rescue nil
app(dev)> end
Product defines save at ["/Users/miguno/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/activerecord-8.1.1/lib/active_record/suppressor.rb", 51]
ApplicationRecord defines save at ["/Users/miguno/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/activerecord-8.1.1/lib/active_record/suppressor.rb", 51]
ActiveRecord::Base defines save at ["/Users/miguno/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/activerecord-8.1.1/lib/active_record/suppressor.rb", 51]
ActiveRecord::Suppressor defines save at ["/Users/miguno/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/activerecord-8.1.1/lib/active_record/suppressor.rb", 51]
ActiveRecord::Transactions defines save at ["/Users/miguno/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/activerecord-8.1.1/lib/active_record/transactions.rb", 380]
ActiveRecord::Validations defines save at ["/Users/miguno/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/activerecord-8.1.1/lib/active_record/validations.rb", 47]
ActiveRecord::Persistence defines save at ["/Users/miguno/.local/share/mise/installs/ruby/3.4.7/lib/ruby/gems/3.4.0/gems/activerecord-8.1.1/lib/active_record/persistence.rb", 390]
[
[ 0] class Product < ApplicationRecord {
id: :integer,
name: :string,
created_at: :datetime,
updated_at: :datetime
},
[ 1] Product::GeneratedAssociationMethods,
[ 2] Product::GeneratedAttributeMethods,
[ 3] ApplicationRecord(abstract) < ActiveRecord::Base,
[ 4] ApplicationRecord::GeneratedAssociationMethods,
[ 5] ApplicationRecord::GeneratedAttributeMethods,
[ 6] ActionText::Encryption,
[ 7] ActiveRecord::Base,
[ 8] Turbo::Broadcastable,
[ 9] ActionText::Attribute,
[10] ActiveStorage::Reflection::ActiveRecordExtensions,
[11] ActiveStorage::Attached::Model,
[12] GlobalID::Identification,
[13] ActiveRecord::Marshalling::Methods,
[14] ActiveRecord::Suppressor,
[15] ActiveRecord::SignedId,
[16] ActiveRecord::TokenFor,
[17] ActiveRecord::SecureToken,
[18] ActiveRecord::Store,
[19] ActiveRecord::Serialization,
[20] ActiveModel::Serializers::JSON,
[21] ActiveModel::Serialization,
[22] ActiveRecord::Reflection,
[23] ActiveRecord::NoTouching,
[24] ActiveRecord::TouchLater,
[25] ActiveRecord::Transactions,
[26] ActiveRecord::NestedAttributes,
[27] ActiveRecord::AutosaveAssociation,
[28] ActiveRecord::SecurePassword,
[29] ActiveModel::SecurePassword,
[30] ActiveRecord::Associations,
[31] ActiveRecord::Timestamp,
[32] ActiveRecord::Callbacks,
[33] ActiveRecord::AttributeMethods::Serialization,
[34] ActiveRecord::AttributeMethods::Dirty,
[35] ActiveRecord::AttributeMethods::TimeZoneConversion,
[36] ActiveRecord::AttributeMethods::PrimaryKey,
[37] ActiveRecord::AttributeMethods::Query,
[38] ActiveRecord::AttributeMethods::BeforeTypeCast,
[39] ActiveRecord::AttributeMethods::Write,
[40] ActiveRecord::AttributeMethods::Read,
[41] ActiveRecord::Base::GeneratedAssociationMethods,
[42] ActiveRecord::Base::GeneratedAttributeMethods,
[43] ActiveRecord::AttributeMethods,
[44] ActiveRecord::Encryption::EncryptableRecord,
[45] ActiveRecord::Locking::Pessimistic,
[46] ActiveRecord::Locking::Optimistic,
[47] ActiveRecord::Attributes,
[48] ActiveModel::Validations::Callbacks,
[49] ActiveModel::Dirty,
[50] ActiveModel::AttributeMethods,
[51] ActiveModel::Attributes::Normalization,
[52] ActiveModel::AttributeRegistration,
[53] ActiveRecord::CounterCache,
[54] ActiveRecord::Validations,
[55] ActiveRecord::Integration,
[56] ActiveRecord::AttributeAssignment,
[57] ActiveRecord::Sanitization,
[58] ActiveRecord::Scoping::Named,
[59] ActiveRecord::Scoping::Default,
[60] ActiveRecord::Scoping,
[61] ActiveRecord::Inheritance,
[62] ActiveRecord::ModelSchema,
[63] ActiveRecord::ReadonlyAttributes,
[64] ActiveRecord::Persistence,
[65] ActiveRecord::Core,
[66] ActiveModel::Access,
[67] ActiveModel::API,
[68] ActiveModel::AttributeAssignment,
[69] ActiveModel::ForbiddenAttributesProtection,
[70] ActiveModel::Conversion,
[71] ActiveModel::Validations::HelperMethods,
[72] ActiveSupport::Callbacks,
[73] ActiveModel::Validations,
[74] ActiveSupport::Dependencies::RequireDependency,
[75] Object < BasicObject,
[76] RequireAll,
[77] PP::ObjectMixin,
[78] ActiveSupport::ToJsonWithActiveSupportEncoder,
[79] ActiveSupport::Tryable,
[80] JSON::Ext::Generator::GeneratorMethods::Object,
[81] Kernel,
[82] BasicObject
]