Railsのアソシエーション 〜お前、なぜそれを知っている?!〜
どうも、ずみーです。
突然ですがみなさん、Railsの勉強をしていて、不思議に思うことはありませんか。
お前、なぜそれを知っている?!と。
実はこのRails、こっちが指示していないことも裏でたくさんやっといてくれる、
小粋な心遣いがいっぱいなのでした。
ことの発端
ある日、手順書を見ながらチュートリアルアプリの実装を進めていました。
テーブルは2つです↓
users
id | |
---|---|
1 | hogehoge@qmail.com |
2 | norinori@uahoo.co.jp |
tweets
id | text | user_id |
---|---|---|
1 | ノリノリだぜ | 2 |
2 | おりゃあああ | 1 |
3 | グフっ | 1 |
4 | なんだって? | 2 |
1人のユーザに対して、複数のツイートが存在するという状況です。
(ツイートの例がアホみたいですが気にしないで^^)
モデルにアソシエーションを設定
userモデル
class User < ApplicationRecord 〜省略〜 has_many :tweets end
tweetモデル
class Tweet < ApplicationRecord 〜省略〜 belongs_to :user end
has_manyメソッドとbelongs_toメソッドでアソシエーション(関係)を記述していきます。
ユーザ:ツイートが1:多なので、 英語で書いてみるとわかりやすい。
User has many tweets.
Tweet belongs_to user.
...って、あれ?
has_many :tweets
モデル名が複数形になってる!
もう一つの疑問
user_idがユーザのことだってなぜわかるのだろう?
確かにtweetはuser_idをキーとしてuserと紐づいています。
users
id | |
---|---|
1 | hogehoge@qmail.com |
2 | norinori@uahoo.co.jp |
tweets
id | text | user_id |
---|---|---|
1 | ノリノリだぜ | 2 |
2 | おりゃあああ | 1 |
3 | グフっ | 1 |
4 | なんだって? | 2 |
調べてみた
今回の疑問は二つ。
記事によると、モデル名(必ず単数形)やカラム名を、規約通りに書くことで、Railsがよしなに判断してくれるというものでした。
まさにCoC(Convention over Configuration)(設定より規約)なのですね。
それでは、また。