##0.アソシエーションができたらSNSがつくれる
今回は「テーブル同士を関連づけさせる」ためにアソシエーションをマスターしたい。
これができたら、とりあえずrailsでSNS的なものがつくれる!!…って思っている。
##1.モデルを作成する。
今回は参考ページをもとに、「お城」と「城主」の関係でアソシエーションをつくりたい。お城を「castle」で、城主を「owner」でつくりたい。
1対多の関係。ownerが1で、castleが多。
###まずはownerテーブルをつくる
$ rails g model owner name:string
これでnameカラムが入ったownerテーブルがつくれた。
###次にcastleテーブル
ownerと紐付けさせるために、owner_idのカラムをつくる。
$ rails g model castle castle:sting owner_id:integer
###データベースに反映
$ rails db:migrate
いつものやつ。
##3.railsコンソールでデータを追加。
###railsコンソールを起動
$rails c
###まずは、ownerを追加する。
上から順番に「徳川家康」「豊臣秀吉」「織田信長」って追加する。
$ Owner.create(name:"徳川家康")
$ Owner.create(name:"豊臣秀吉")
$ Owner.create(name:"織田信長")
Owner.all
で確認。owner_idとしては、徳川家康が1、豊臣秀吉が2、織田信長が3で登録された。
###次にcastleを追加する。
owner_idは江戸城を1、大阪城を2、清洲城と安土城を3として設定する。
$ Castle.create(castle:"江戸城",owner_id:1)
$ Castle.create(castle:"大阪城",owner_id:2)
$ Castle.create(castle:"清洲城",owner_id:3)
$ Castle.create(castle:"安土城",owner_id:3)
追加されていることを確認する。
$ Owner.all
$ Castle.all
##4.belongs_toとhas_manyで紐付けする
Castles belongs to Owner (CastleはOwnerに所属している)
Owner has many Castles (Ownerは複数のCastleを所有している)
ってことだから、Castleモデルにbelongs_toでOwnerモデルにhas_manyを記述すれば良い。
belongs_to :owner
has_many :castles, dependent: :destroy
#castlesで複数形にする
#dependent: :destroyで、例えば織田信長が所有する城を全て削除ということを簡潔に命令できるようになる。
##5.これで紐付けられたということになるのか...?
たったのこれだけで紐付けが完了したということになるのか。
とはいえ、確認する為にはどうしたらいいのか分からない。
たぶん、また複雑な段階を踏むということかもしれない。
だがしかし、とりあえずはアソシエーションの基礎の基礎が分かった。
これにdeviceとかscaffoldをくっつけていけば、ログイン機能が実装され、SNSがつくれるということだな。
##参考
【Rails入門】has_many、belongs_toの使い方まとめ
http://www.sejuku.net/blog/26617