newメソッドとは

>Active Record

#### Active Recordオブジェクトは直接属性を明示するのではなく、むしろActive Recordオブジェクトを結合されるテーブル定義からActive Recordオブジェクトを推論する。属性、Active Recordオブジェクトを追加すること、削除すること、変更することはデータベースで直接実行する。変化は直ちにActive Recordオブジェクト上で反映される。特定のActive Recordクラスに特定のデータベーステーブルへ結びつける関数はほとんどの場合、自動的に起こる、しかし珍しい一つのケースに対して上書きすることができます

>Active Record objects don’t specify their attributes directly, but rather infer them from the table definition with which they’re linked. Adding, removing, and changing attributes and their type is done directly in the database. Any change is instantly reflected in the Active Record objects. The mapping that binds a given Active Record class to a certain database table will happen automatically in most common cases, but can be overwritten for the uncommon ones.

https://api.rubyonrails.org/classes/ActiveRecord/Base.html#:~:text=Active%20Record%20objects,the%20uncommon%20ones

```rb
irb(main):001:0> User
=> User (call 'User.connection' to establish a connection)
irb(main):002:0> User.superclass
=> ApplicationRecord(abstract)
irb(main):003:0> User.superclass.superclass
=> ActiveRecord::Base
```
### ApplicationRecordとは?
```rb
class ApplicationRecord < ActiveRecord::Base
  primary_abstract_class
end
```

### primary_abstract_classとは
#### Active Recordのapplicationrecordクラスをセットする。もしアプリケーションがプライマリの抽象的なクラスとしてApplicationRecordとは違うクラスを使う場合これは便利です。このクラスはActive Recordを使ってデータベースコネクションを共有するだろう。プライマリのデータベースへ接続するクラスです。
      # Sets the application record class for Active Record
      #
      # This is useful if your application uses a different class than
      # ApplicationRecord for your primary abstract class. This class
      # will share a database connection with Active Record. It is the class
      # that connects to your primary database.

https://github.com/rails/rails/blob/cf6ff17e9a3c6c1139040b519a341f55f0be16cf/activerecord/lib/active_record/inheritance.rb#L171C1-L176C48

>ApplicationRecordを別のクラス名に変えている場合は、primary_abstract_classを設定する必要があります。これにより、RailsはコネクションをどのクラスのActiveRecord::Baseと共有すべきかを認識できるようになります。
```rb
class PrimaryApplicationRecord < ActiveRecord::Base
  primary_abstract_class

  connects_to database: { writing: :primary, reading: :primary_replica }
end
```
>この場合、primaryやprimary_replicaに接続するクラスは、標準のRailsアプリケーションがApplicationRecordで行っているのと同じように、プライマリの抽象クラスから継承できます。
```rb
class Person < PrimaryApplicationRecord
end
```
https://railsguides.jp/active_record_multiple_databases.html#:~:text=ApplicationRecord%E3%82%92%E5%88%A5,%3C%20PrimaryApplicationRecord%0Aend

### newメソッド
>Active Records accept constructor parameters either in a hash or as a block. The hash method is especially useful when you’re receiving the data from somewhere else, like an HTTP request. It works like this:
```rb
user = User.new(name: "David", occupation: "Code Artist")
user.name # => "David"
```
https://api.rubyonrails.org/classes/ActiveRecord/Base.html#:~:text=Creation,name%20%23%20%3D%3E%20%22David%22

### 感想
newメソッドがどういう処理なのか知りたかったが現時点では無理だった。
どっちのnewを使っているのか?

https://api.rubyonrails.org/classes/ActiveModel/API.html#method-c-new:~:text=new(attributes%20%3D%20%7B%7D),age%20%20%23%20%3D%3E%20%2218%22

https://api.rubyonrails.org/classes/ActiveRecord/Core.html#method-c-new:~:text=new(attributes%20%3D%20nil,%27Jamie%27)