Sun~sun~Flower's

〜ITエンジニアとして日々前向きに生きていくノウハウブログ〜

MENU

【Railsアプリケーション】モデルの仕組みとアソシエーションについて

f:id:mTakata:20200428221502j:plain

こんにちは。

当ページにアクセスしてくださり、ありがとうございます。

 

この記事は、プログラミング言語「Ruby」のフレームワーク「Rails」についての記事になります。

問題.1

モデルについての問題です。

 

例えばPictweetで、Tweet.find(1)を実行するとidが1番のつぶやきを取得することができます。

 

この時、Tweetクラスの中にfindメソッドを定義していないにも関わらず、findというメソッドを使用できる理由を述べてください。

模範回答

ターミナル上で、

```ターミナル

$ rails g model tweet
``` 

上記のコマンドを実行するとTweetクラスが作成されますが、このTweetクラスはActiveRecord::Baseを継承しています。

 

そこで、ActiveRecord::Baseとは、

テーブルにアクセスして、レコードを取得する為のメソッド

上記です。

 

テーブルに格納されたレコードを取り扱う動作として、全件取得・検索・追加・更新・削除などがあります。

 

これらをやってくれるメソッドがActiveRecord::Baseに入っているのです。そして、 

```Rails(Ruby)

1 class Tweet < ActiveRecord::Base   
2 end

``` 

上記の記述で、TweetクラスがActiveRecord::Baseを継承します。

 

これによって、TweetクラスがActiveRecord::Baseで定義されているメソッドを使用することが出来るのです。

問題.2

Railsにおけるアソシエーションとはどのような機能か、またMVCのどこに含まれる機能なのか簡潔に述べてください。

模範回答

DBのテーブルとテーブルを紐づけることによって、関連するデータの読み書きを容易にするための機能。

 

MVCの中のM(モデル)に含まれます。

 

具体的には、次のように書きます。

(例)Tweetクラス

```Rails(Ruby)
   
1
class Tweet < ActiveRecord::Base
2   belongs_to : user // この行がアソシエーション
3 end
```

(例)Userクラス

```Rails(Ruby)
   
1
class User < ActiveRecord::Base
has_many : tweets // この行がアソシエーション
3 end
```

上記のように、belongs_toやhas_manyを使ってテーブル同士の関係を明確に出来ます。

 

これがアソシエーションの役割です。

 

以上となります、参考になれば幸いです。

 

最後まで読んでいただき、ありがとうございました。