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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3126閲覧

Railsでいいねをした人のユーザーネームを表示したい

ryotasakurai

総合スコア1

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/02 09:22

前提・実現したいこと

Ruby on Rails で 投稿した記事にいいねをされた数ではなく、いいねをしたユーザーのユーザー名を表示したいのですができません。

発生している問題・エラーメッセージ

NoMethodError in PostsController#show undefined method `user_id' for #

該当のソースコード

posts_controllerのタブ def show @post = Post.find_by(id: params[:id]) @user = @post.user @likes = Like.where(post_id: @post.id) @likes_name = User.find_by(id: @likes.user_id) end
show.htmlのタブ <p> <% @likes_name.each do |name|%> <%= link_to(user.name, "/users/#{user.id}") %> <% end %> </p>

試したこと

@likesで投稿にいいねされたデータをlikesテーブルから取り出して、その中のuser_idを使って@likes_nameでusersテーブルからnameを取り出してshow.htmlに表示しようと考えました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

@likesにいいねしたユーザの情報が入っているのでそれをview側でeachで回すとどうでしょうか?

view

1@likes.each do |like| 2 like.user.name 3end

投稿2020/09/02 11:53

編集2020/09/03 00:44
nasuk47

総合スコア311

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

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

ryotasakurai

2020/09/02 22:32

回答して頂きありがとうございます!! @likesなどの記述は変えずにHTML側に代入するという事であっていますでしょうか? 試してみたところ、投稿者の名前だけ表示されていて、いいねした側のユーザーの名前が表示されません。 私の質問の質が低い事大変申し訳ないのですが、よろしくお願いします…。
nasuk47

2020/09/03 00:46

@likes_name = User.find_by(id: @likes.user_id)にはデータが一つしかないので ループ処理はできません。 @likesにいいねしたユーザーの情報が入っていると思うのでそれをループする実装でどうでしょうか? 参考のコードを回答に記載しました。
ryotasakurai

2020/09/03 10:46

返信ありがとうございます。 undefined method `user' for #<Like:0x00007f44cdf9b2a8> Did you mean? user_id このようなエラーメッセージが出ました。like.user.nameをlike.user_idにしたらidは取り出せ表示できました。 likeテーブルに id/user_id/post_id/created_at/updated_at しかなく、nameカラムがないこと原因だと思います。likeテーブルにnameカラムを追加していいねをしたときにログインしているユーザー名を保存するようにすればよいのかなと考えたのですが、ほかの方法で、likeテーブルから取り出したuser_idを用いてuserテーブルからnameを取り出すことはできないのでしょうか? 重ね重ねの質問になってしまい申し訳ありません。また何か間違えている事がありましたらご指摘お願いします。
nasuk47

2020/09/03 11:13

モデルのアソシエーションはどのようになっていますか? 回答の方にpostモデルuserモデルlikeモデルの追記をお願いします。
ryotasakurai

2020/09/04 08:14

返信が遅れて申し訳ありません。よろしくお願いします。 likeモデル class Like < ApplicationRecord validates :user_id, {presence: true} validates :post_id, {presence: true} end postモデル 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 userモデル class User < ApplicationRecord has_secure_password validates :name, {presence: true} validates :email, {presence: true, uniqueness: true} def posts return Post.where(user_id: self.id) end has_many :posts, :dependent => :destroy end
ryotasakurai

2020/09/05 05:06

ありがとうございます! 分からないが分かりました!お時間をさいていただき本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問