LoginSignup
2
1

More than 5 years have passed since last update.

【勉強メモ】アソシエーションできるようにする!【挫折しない!】

Posted at

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で登録された。

スクリーンショット 2017-10-11 07.08.52.png

次に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

スクリーンショット 2017-10-11 07.30.10.png

4.belongs_toとhas_manyで紐付けする

Castles belongs to Owner (CastleはOwnerに所属している)
Owner has many Castles (Ownerは複数のCastleを所有している)

ってことだから、Castleモデルにbelongs_toでOwnerモデルにhas_manyを記述すれば良い。

app/models/castle.rb
belongs_to :owner
app/models/owner.rb
has_many :castles, dependent: :destroy

#castlesで複数形にする
#dependent: :destroyで、例えば織田信長が所有する城を全て削除ということを簡潔に命令できるようになる。

5.これで紐付けられたということになるのか...?

たったのこれだけで紐付けが完了したということになるのか。
とはいえ、確認する為にはどうしたらいいのか分からない。
たぶん、また複雑な段階を踏むということかもしれない。
だがしかし、とりあえずはアソシエーションの基礎の基礎が分かった。
これにdeviceとかscaffoldをくっつけていけば、ログイン機能が実装され、SNSがつくれるということだな。

参考

【Rails入門】has_many、belongs_toの使い方まとめ
http://www.sejuku.net/blog/26617

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1