質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3448閲覧

@user = @post.userの意味

masa9216

総合スコア15

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/09/23 07:48

編集2018/09/23 12:10

def show
@post = Post.find_by(id: params[:id])
** @user = @post.user**
@likes_count = Like.where(post_id: @post.id).count
end

rails5でいいねの数を表示させるために、posts_controller.rbのshowアクションを定義しているところで、
@user = @post.userの意味がよくわかりませんでした。

@post = Post.find_by(id: params[:id])は、
ルーティングのURLから取得できるidの値をもとに投稿データを取得し、@postに代入。
@likes_count = Like.where(post_id: @post.id).countは、likesテーブルから、post_idの値が上記の投稿者のidであるデータ(いいね)の件数を取得すると理解しています。

以下、showアクションに対応するビューファイル

<div class="main posts-show"> <div class="container"> <div class="posts-show-item"> <div class="post-user-name"> <img src="<%= "/user_images/#{@user.image_name}" %>"> <%= link_to(@user.name, "/users/#{@user.id}") %> </div> <p> <%= @post.content %> </p> <div class="post-time"> <%= @post.created_at %> </div> <% if Like.find_by(user_id: @current_user.id, post_id: @post.id) %> <%= link_to("/likes/#{@post.id}/destroy", {method: "post"}) do %> <span class="fa fa-heart like-btn-unlike"></span> <% end %> <% else %> <%= link_to("/likes/#{@post.id}/create", {method: "post"}) do %> <span class="fa fa-heart like-btn"></span> <% end %> <% end %> <%= @likes_count %>
<% if @post.user_id == @current_user.id %> <div class="post-menus"> <%= link_to("編集", "/posts/#{@post.id}/edit") %> <%= link_to("削除", "/posts/#{@post.id}/destroy", {method: "post"}) %> </div> <% end %> </div>
</div> </div>

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y-doi

2018/09/23 12:21

意味がわからないということは、自分で考えて書いたわけではなく、なにかを参考にされたとのだと思います。何を参考にされたのかも記述するようお願いします。
masa9216

2018/09/23 12:45

ProgateのRuby on Rails5、道場コースIV、10/14、いいね数を表示しようのところで出された課題です。よろしくお願いします。
guest

回答1

0

ベストアンサー

/app/models/post.rbを見るとPostクラスにuserメソッドが定義されています。

class Post < ApplicationRecord validates :content, {presence: true, length: {maximum: 140}} validates :user_id, {presence: true} def user return User.find_by(id: self.user_id) end end

つまり@post.userではこのuserメソッドが呼ばれています。

投稿2018/09/23 12:59

編集2018/09/23 13:01
y-doi

総合スコア322

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masa9216

2018/09/23 13:12

ありがとうございます!その投稿に紐付いたuserインスタンスを戻り値として返すuserメソッドを呼び出した後に、@userに代入することにはどんな意味があるのですか?
y-doi

2018/09/23 13:23 編集

app/views/posts/show.html.erbにおいて、その紐付いたuserを@userという変数で表示したりすることができます。
masa9216

2018/09/23 13:26

わかりやすい説明ありがとうございます。独学でやっているので助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問