「.id」か「_id」か
困った
なんか、idが乱用されていて、初心者を惑わせてくる。
結論
.id
:主キーの取得_id
:関連のチェック
解説
.id
.id
はActive Recordオブジェクトのプライマリキー(主キー)を取得する。
(tweet.all
とかuser.find()
とかの、前半部分がオブジェクト)- データベーステーブルには普通idというカラムがある。
- ex. Userモデル -> usersテーブル -> idカラム という状態で、
user.id => userオブジェクトの主キー(id)
_id
ActiveRecordメソッド(復習)
- モデルがテーブル操作に関して使用できるメソッドの総称
- find all new save...などなど
- オブジェクトリレーショナルマッピング(Object-Relational Mapping、ORM)の実装。
サンプルコード
<% if user_signed_in? && current_user.id == @tweet.user_id %>
current_user.id:ヘルパーメソッドcurrent_userの主キー(ID)を取得。
@tweet.user_id:@tweetオブジェクトのユーザーIDカラムを取得。
まとめ
.id
は、単一のテーブルの単一のレコードから、主キーであるidカラムの情報を取得。_id
は、複数のテーブルが関連しているときに、tweetテーブルの中のuser_idカラムみたいに登場する。- `XX.xx" = "XX(レコード)のxxカラム"
補足(20230801追記)
主キー:その値を指定すると特定のレコードを一意識別できる属性(NULL不可)
└検索するのに、ダブりがあると色々不都合あるよね。みたいなキー。 identify:識別外部キー:テーブルとテーブルを関連づけるキー。
└よって、参照先の属性に存在する値から選ばれないといけない。
(ちなみNULLでも可)
└上記で言うところのuser_id
(Tweetモデル内からUserモデルを参照。Userモデル内に存在する値。)- Active Record
Railsでは、主キーや外部キーなどのカラムを呼び出す記法が、通常のメソッドと同じ。
user.id
<=>tweet.user_id
<=>gets.to_i
逆に言うと、見た目は同じでも意味合いが全然違う。
だからややこしい。