アイソレーション

お疲れ様です_(._.)_
今日も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」に所属する。

ということですね。



ーーーーーーーーーーーーーーーーーーーーーーー



いかがでしたか?
正直、ここの分野は、理解するのに時間がかかりそうです。

そのため、至らない説明になっているかと思います。

もし
「ここはこういう意味だよー!」
というご意見等があれば、是非お願いいたします!

それでは、今日も最後まで読んでくださってありがとうございました!