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

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

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

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

Ruby

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

Q&A

解決済

2回答

243閲覧

いいねを押したマイクロポストをviewに一覧表示にする方法について

messy1019

総合スコア18

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2018/08/04 09:28

編集2018/08/04 09:32

下記サイトを参考にいいね!機能を実装しました。

https://qiita.com/jaramon/items/248bcb4b56e9fed8fc90

そのあとにユーザーがいいね!を押したマイクロポストの一覧をviewに表示したいと思いましたがうまくいかない状況です。

それぞれのモデルのアソシエーションの関係から、うまく対象のユーザーがいいね!を押したマイクロポストの一覧をデータベースから取得できません。

現在のコード

・users_controller.rb

class UsersController < ApplicationController before_action :logged_in_user, only: [:index, :edit, :update, :destroy] before_action :admin_user, only: :destroy def likes @user = User.find(params[:id]) @likes = Like.find_by(user_id: @user.id) @microposts = @likes.micropost.paginate(page: params[:page])

@microposts = @likes.micropost.paginate(page: params[:page])のコードがうまくかけずに必要なデータが照れない状況です。

その他のモデルの状況

・user.rb

class User < ApplicationRecord has_many :microposts, dependent: :destroy has_many :likes, dependent: :destroy

.micropost.rb

class Micropost < ApplicationRecord before_validation :set_in_reply_to has_many :likes, dependent: :destroy has_many :iine_users, through: :likes, source: :user belongs_to :user

・like.rb

class Like < ApplicationRecord belongs_to :user belongs_to :micropost counter_culture :micropost validates :user_id, presence: true validates :micropost_id, presence: true end

users_controller.rbのdef likesにどのように書けばうまくいくか教えて頂けますでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

それぞれのモデルのアソシエーションの関係から、うまく対象のユーザーがいいね!を押したマイクロポストの一覧をデータベースから取得できません。

@microposts = @likes.micropost.paginate(page: params[:page])のコードがうまくかけずに必要なデータが照れない状況です。

というのは、例えば空になるのか、nilになるのか、エラーになるのか、よくわかりません。もう少し細かい情報を書いた方が望ましいです。

とりあえず問題の切り分けとしては、簡単なしくみに変えて、どこまでできてどこができてないかを調べるべきでしょう。今回の例なら、paginateを止めて、とにかく全件表示するのがよさそうです。

というわけで、

ruby

1@microposts = @likes.micropost.paginate(page: params[:page])

ruby

1@microposts = @likes.micropost

に変えてみるとか。

…というか、この時点でエラーが出るんではないでしょうか。おそらく、

ruby

1@microposts = @likes.map{|like| like.micropost}

にしないと駄目だったりしませんか? なぜならLikeはhas_many :micropostではなくbelongs_to :micropostなので。

投稿2018/08/04 10:02

takahashim

総合スコア1877

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

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

messy1019

2018/08/04 11:03

takahashimさんのおっしゃる通り、@likes配列からmapで取り出せたら表示できました。 takahashimさんにはいつもご回答頂いており本当に感謝しております。 本当に一度いつかご飯を奢らせて頂きたいくらいです。。。 paginateは実装できていませんが、必須事項ではありませんので、またの機会に試してみたいと思います。
guest

0

大変申し訳ありません、誤まって回答を投稿してしまいました。。

投稿2018/08/05 10:44

編集2018/08/05 10:46
anza

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問