前提・実現したいこと
現在ProgateのRuby on RailsⅨを勉強中です。
Postモデルにuserメソッドを定義し、投稿に紐づいたuserインスタンスを戻り値として返すuserメソッドの理解に苦戦しているため質問させてください。
該当のソースコード
データベース
Posts
|id|content|created_at|update_at|user_id
|:--|:--:|--:|
||||
Users
|id|name|email|created_at|update_at|image_name|password
|:--|:--:|--:|
||||
**Postモデルで、投稿とユーザーを紐づけるためのインスタンスメソッドを定義
**
/models/post.rb
class Post < ApplicationRecord #インスタンスメソッドuserを定義してください def user return User.find_by(id: self.user_id) end end
$ rails console > post = Post.find_by(id: 1) > post.user => id: 1 name: hoge . . .
わからないこと
- 「インスタンスメソッド内で、selfはそのインスタンス自身を表す」との説明があったが、それはどういう意味なのか
- 何故、Postモデルで定義するのか
- Postクラスのインスタンス変数はどこに書いてあるのか
私なりの解釈として、上記のコードには記載がありませんでしたが、
class Post < ApplicationRecord #attr_accessor :content #attr_accessor :user_id #インスタンスメソッドuserを定義してください def user return User.find_by(id: self.user_id) end end
Postクラスには、上記のコードで#コメントに記載したように content と user_id のインスタンス変数があり、selfの意味は Postクラス内にあるインスタンス変数 user_id のことを指しているのかと予想しています。しかし、「インスタンスメソッド内で、selfはそのインスタンス自身を表す」という意味を理解することができません・・・。
あと、Postクラスのインスタンス変数は、データベースの各項目のことなのかな、と考えているのですが、その理解で合っていますでしょうか。
また、Postクラスの中でUserを使ってインスタンスメソッドを定義していますが、これはデータベースのUserモデルの中身をfind_byメソッドで探しているという解釈でよろしいでしょうか。なんだかPostクラスの中でUserを使用しているのが初めての書き方で違和感があります・・・。
Rubyではクラスとインスタンスメソッドについて理解はしていたつもりでしたが、Railsになると、さっぱりわからなくなってしまいました。
わかりづらい質問ですみませんが、以上について、お答えいただけると幸いです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/27 04:06
2020/07/27 04:09
2020/07/27 15:16