アイソレーション
お疲れ様です_(._.)_
今日もRuby on Railsの勉強をしていたIHです。
今日は
「Ruby on Railsで、『pictweet』という、Twitter風のアプリを制作してみよ~」
というカリキュラムをやっておりました。
・ユーザー登録機能の追加
・マイページの実装
という内容だったのですが、これが中々のボリュームでした。
モデルやテーブルが複数出てきたことにより、コードがより複雑になる。そして、その複雑なコードをシンプルな記述にすべくと、色々な概念やメソッドも登場してきました。
正直、
「情報量多過ぎて頭ついていかねー!」
状態でしたね。笑
まあでも、この「わかんねー!」は、
Railsを使う人たちが全員通る道だと思うので。
それに、僕も先週まで
「ターミナルってなんなん!?
Linuxコマンドって何の役に立つん!?」
という状態から、普通に
「◯◯ディレクトリに移動したいから、cd ◯◯
を実行して……と。オッケー、移動できたから
ruby sample.rbで実行や!」
ってやれてますからね。何とか。
だから、何度も使っていく中で、理解できてくる部分もあるんじゃないかなと思ってます。
気持ちはリラックス。
されど行動は怠らず。
ということで今日もアウトプットしていきましょー!!
日付をまたいで、もう今日じゃなくなってますが。笑
ーーーーーーーーーーーーーーーーーーーーーーー
さて、今日は先ほど紹介しました、
「ユーザー登録機能」
を実装する上で重要な概念についての
アウトプットをしたいと思います。
その概念の名は
「アイソレーション」
です!
説明しよう! アイソレーションとは!?
・アイソレーション
→モデルを利用して、テーブル同士に関連付けを行うこと。
もうちょっと詳しく説明しますね。
ユーザー登録機能を実装するには、
複数のモデルが必要になってきます。
昨日まで僕が作っていた「pictweet」には、
・ツイートの文章(例:今日は海に行ってきました!)
・画像(例:海の写真)
・名前(例:IH)
という3つの情報をもつ「tweetsテーブル」と、
tweetsテーブルに対応する「Tweetモデル」だけがありました。
つまり、この時点では
1つのテーブルと1つのモデル
しか「pictweet」は持っていなかったのです。
だから、投稿はできても
「誰がどのツイートを投稿したのか」
といった情報がありません。
または、以下のようなこともできてしまいます。
「あいつ海に行っただと! リア充しやがって! 俺が削除してやる! 」
「『彼女とデートに行きました!』だって!?
くそっ! 羨ましい! 悔しいから自撮り写真をゴキ◯リの画像に差し替えてやる!」
といったように、他人のツイートを勝手に削除したり、編集したりできるわけですね。
もうめちゃくちゃだよ。
しかし、
・ユーザーの名前(ニックネーム)
・Email
・パスワード
といった情報をもつ「usersテーブル」とそれに対応した「Userモデル」を作り、usersテーブルとtweetsテーブルを関連付ければ、
・各ユーザーが、自分の投稿したツイートを編集したり、削除することができる!
・誰がどのツイートを投稿したのかがわかる!
となります!
(これをするには、deviceという、ユーザー管理機能を簡単に実装してくれるGemが必要なのですが、説明が長くなるため、ここでは省きます。
めっちゃ大事なんですがね。僕もまだ理解しきれていないので、勉強しておきます✍️)
ここで、2つのメソッドが出てきます。
それは、
・has_manyメソッド
・belongs_toメソッド
です。
has_manyメソッドとは、
「1人のユーザーが複数の投稿を所持している状態」を示すメソッドです。
我々がするツイートは、ユーザーにとって「所持しているもの」なんですね。
belongs_toメソッドとは、
「1つの投稿は、1人のユーザーに所属する」
ということを示すメソッドです。
確かに、1つの投稿を複数人で所有する、なんてこと、ありませんものね。
has_manyメソッドは
app/models/user.rbに
「has_many :tweets」
と、
belongs_toメソッドは
app/models/tweet.rbに
「belongs_to :user」
と記述します。
1人のユーザーは、複数の「tweets」を持つ。
1つのツイート(投稿)は、1人の「user」に所属する。
ということですね。
ーーーーーーーーーーーーーーーーーーーーーーー
いかがでしたか?
正直、ここの分野は、理解するのに時間がかかりそうです。
そのため、至らない説明になっているかと思います。
もし
「ここはこういう意味だよー!」
というご意見等があれば、是非お願いいたします!
それでは、今日も最後まで読んでくださってありがとうございました!