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はどんどん便利になっていくと感じた