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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

540閲覧

お気に入りした投稿の一覧表示ができない

MSSS.

総合スコア5

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2020/12/24 08:15

ユーザーがいいねを押した投稿をマイページに表示させるようにしたいのですが
エラーになるため教えていただきたいです。

likes = like.where(user_id: current_user.id).pluck(:preschool_id)

こちらに

undefined local variable or method `like' for #<UsersController:0x00007f960e335008> Did you mean? likes

というエラーが出たのですがlike→likesに変更をすると

undefined method `where' for nil:NilClass Did you mean? when

というエラーになります。

###該当コード

rails

1class UsersController < ApplicationController 2 def show 3 @user = User.find(params[:id]) 4 likes = like.where(user_id: current_user.id).pluck(:preschool_id) 5 @like_list = preschool.find(likes) 6 end 7end

show.html.erb

1<div class='preschool-contents'> 2 <ul class='preschool-lists'> 3 <li class='list'> 4 <% @preschools.each do |preschool| %> 5 <%= link_to preschool_path(preschool.id) do %> 6 <div class='preschool-img-content'> 7 <% preschool.images.each do |image|%> 8 <%= image_tag(preschool.images[0], class:"preschool-img")%> 9 </div> 10 <div class='preschool-info'> 11 <h3 class='preschool-name'><%= preschool.name %></h3> 12 <h3 class='preschool-concept'><%= preschool.concept %></h3> 13 </div> 14 <% end %> 15 <% end %> 16 17 <% if user_signed_in? && current_user.already_liked?(preschool) %> 18 <%= link_to "いいね解除",preschool_likes_path(preschool), method: :delete %> 19 <%= preschool.likes.count %> 20 <% elsif user_signed_in? %> 21 <%= link_to "いいね!", preschool_likes_path(preschool), method: :post %> 22 <%= preschool.likes.count %> 23 <% end %> 24 <% end %>

ルーティング↓

Rails.application.routes.draw do //省略 resources :users, only: [:show] do get :likes, only:[:create,:destroy] end resources :preschools do resources :comments, only:[:create,:edit,:update,:destroy] resource :likes, only:[:create,:destroy] end end

likesコントローラー↓

class LikesController < ApplicationController def create @like = current_user.likes.create(preschool_id: params[:preschool_id]) redirect_back(fallback_location: root_path) end def destroy @preschool =Preschool.find(params[:preschool_id]) @like = current_user.likes.find_by(preschool_id: @preschool.id) @like.destroy redirect_back(fallback_location: root_path) end end

userモデル↓

class User < ApplicationRecord //省略 def already_liked?(preschool) self.likes.exists?(preschool_id: preschool.id) end has_many :likes //省略 end

###バージョン
rails 6.0.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1# UsersController 2likes = like.where(user_id: current_user.id).pluck(:preschool_id)

この部分を以下のようにしてはいかがでしょう

ruby

1# UsersController 2likes = @user.likes.where(user_id: current_user.id).pluck(:preschool_id)

その先

そうすると、今度はここで、

@like_list = preschool.find(likes)

preschoolが未定義だったり、@like_listが1つしか取得されないので、エラーが出そうな気もしますが...ひとまず進めてみてはいかがでしょう?

投稿2020/12/26 10:07

siruku6

総合スコア1382

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

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

MSSS.

2020/12/28 08:22

ありがとうございます。 モデルにlike_listsを追加し、indexアクションで定義をすることで使えるようになりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問