はじめに
レコードが存在しない場合でもlastメソッドを呼んだ時にエラーにならない!
lastメソッドの前に、ぼっち演算子を記載しないとエラーになるのかなと思ったので気になった、、
該当するコード
viewでadmin_informationsの最終レコードを表示させたい
※admin.admin_informationsが存在しないパターンもある
views/admins/index.html.slim
- information = admin.admin_informations.last
それぞれのモデルは以下です。
models/admin.rb
class Admin < ApplicationRecord
has_many :admin_informations
~省略~
end
models/admin_information.rb
class AdminInformation < ApplicationRecord
belongs_to :admin
~省略~
end
モデルが空の場合にlastメソッドを呼び出してもエラーにならない理由
- レコードが存在しない場合はnilを返すのではなく、空のActiveRecord::Relationを返すから
- has_manyで定義された関連モデルも同様に、レコードが存在しない場合は空のActiveRecord::Relationを返すから
→今回のパターンの場合、has_manyを使うことによって定義されるadmin_informationsは、関連付けられたすべてのオブジェクトのリレーションを返し、存在しない場合関連するモデルの空のActiveRecord::Relationを返す
lastメソッドについて
- lastメソッドとは、最後のレコードを取得するメソッド
- データベースのテーブルの最後の行を取得するために使用する
- アクティブレコードオブジェクトが存在しない場合(テーブルが空の場合)にはnilを返す
まとめ
アクティブレコードオブジェクトが存在しない場合にはnilを返す!!!