Rails6のバージョンアップについて
最近WEB+DB PRESS vol.111を読んで今さらながらRais6に気づいたので、Rails6の新機能をブログにまとめようと思います
ていうかバージョン上げよう...
・ActionMailbox
名前の通りメールができる機能、
メールの受信はもちろん転送や返信、
プロバイダの指定、
取得した情報をデータベースに保存などが出来る
・ActionText
テキストの編集機能を追加出来る新機能、
wordとかexcelとかhatenablogみたいな書式編集が出来る、
ドラッグアンドドロップで画像の追加が出来る、
form.rich_text_areaで簡単に作成、本当にリッチ
・複数データベース
database.ymlで指定することで指定された複数のデータベースに保存されるようになる
・Zeitwerk
Zeitwerkという効率的で早いオートロードシステム
実行順序に依存するオートロード定数のエッジケースも解消
名前空間にあるものは遅延される
・ActiveRecord: :Relation#pick
whereやlimitを使っていた検索をpickで行える
例えばUserテーブルからageが20より多いのもののidを取得する時rails6では
User.where("age>20").limit(1).plunk(:id).first が
User.where("age>20").limit(1).pick(:id) となる
・create_or_find_byメソッド
レコードがなければ作成を行い、レコードがあれば作成しないメソッドに従来は find_or_create_by メソッドを使っていたが、 find_or_create_by ではSQLのSELECTからINSERTを行う際に時間差があるため、その間にSELECTで取得したレコードが古くなってしまう問題があった
create_or_find_byメソッドではINSERTを行い、ユニーク制約のエラーが発生した場合は、SELECTでレコードを取得する
create_or_find_byの注意点としてメソッドを使用する際には、あらかじめユニーク制約を設定する必要があること、レコードの作成よりも参照が多い場合は処理自体が遅くなる可能性があること、また、レコードが作成できない場合の例外がある
・insert_allメソッド
複数件のレコードを一括でINSERTできるメソッド
今まではBULK INSERTという方法を使っていた
他にもまだまだアップデートした点はある様
変更点の多さから今回は特に大きなアップデートだったとわかる
Railsはどんどん便利になっていくと感じた