Ruby on Railsのエラー「undefined method `each' for nil:NilClass」
- 評価
- クリップ 0
- VIEW 352
Ruby on Railsで下記のようなエラーが発生したのですが解決策がわかりません。
わかるかたご教授お願いします。
NoMethodError in Users#likes
undefined method `each' for nil:NilClass
恐らくlikes.html.erbのどこかがおかしいのだと思います
_microposts.html.erb
<ul class="list-unstyled">
<% microposts.each do |micropost| %>
<li class="media mb-3">
<img class="mr-2 rounded" src="<%= gravatar_url(micropost.user, { size: 50 }) %>" alt="">
<div class="media-body">
<div>
<%= link_to micropost.user.name, user_path(micropost.user) %><span class="text-muted"> posted at <%= micropost.created_at %></span>
</div>
<div>
<p class="mb-0"><%= micropost.content %></p>
</div>
</br>
<div>
<% if current_user.checksub?(micropost) %>
<%= form_with(model: current_user.favorites.find_by(micropost_id: micropost.id), local: true, method: :delete) do |f| %>
<%= hidden_field_tag :micropost_id, micropost.id %>
<%= f.submit 'お気に入り解除', class: 'btn btn-danger' %>
<% end %>
<% else %>
<%= form_with(model: current_user.favorites.build, local: true) do |f| %>
<%= hidden_field_tag :micropost_id, micropost.id %>
<%= f.submit 'お気に入り登録', class: 'btn btn-primary' %>
<% end %>
<% end %>
</div>
</br>
<div>
<% if current_user == micropost.user %>
<%= link_to "Delete", micropost, method: :delete, data: { confirm: "You sure?" }, class: "btn btn-danger btn-sm" %>
<% end %>
</div>
</div>
</li>
<%= paginate microposts %>
</ul>
<% end %>
likes.html.erb
<div class="row">
<aside class="col-sm-4">
<div class="card">
<div class="card-header">
<h3 class="card-title"><%= @user.name %></h3>
</div>
<div class="card-body">
<img class="rounded img-fluid" src="<%= gravatar_url(@user, { size: 500 }) %>" alt="">
</div>
</div>
<%= render 'microposts/microposts', microposts: @microposts %>
</aside>
<div class="col-sm-8">
<ul class="nav nav-tabs nav-justified mb-3">
<li class="nav-item"><a href="<%= user_path(@user) %>" class="nav-link <%= 'active' if current_page?(user_path(@user)) %>">Microposts <span class="badge badge-secondary"><%= @count_microposts %></span></a></li>
<li class="nav-item"><a href="<%= followings_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followings_user_path(@user)) %>">Followings <span class="badge badge-secondary"><%= @count_followings %></span></a></li>
<li class="nav-item"><a href="<%= followers_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followers_user_path(@user)) %>">Followers <span class="badge badge-secondary"><%= @count_followers %></span></a></li>
<li class="nav-item"><a href="<%= likes_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(likes_user_path(@user)) %>">Likes <span class="badge badge-secondary"><%= @count_likes %></span></a></li>
</ul>
<%= render 'users', users: @favorites %>
</div>
</div>
microposts_controller.rb
class MicropostsController < ApplicationController
before_action :require_user_logged_in
before_action :correct_user, only: [:destroy]
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "メッセージを投稿しました。"
redirect_to root_url
else
@microposts = current_user.feed_microposts.order(id: :desc).page(params[:page])
flash.now[:danger] = "メッセージの投稿に失敗しました。"
render "toppages/index"
end
end
def destroy
@micropost.destroy
flash[:success] = "メッセージを削除しました。"
redirect_back(fallback_location: root_path)
end
private
def micropost_params
params.require(:micropost).permit(:content)
end
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
unless @micropost
redirect_to root_url
end
end
end
users_controller.rb
class UsersController < ApplicationController
before_action :require_user_logged_in, only: [:index, :show, :followings, :followers, :likes]
def index
@users = User.order(id: :desc).page(params[:page]).per(25)
end
def show
@user = User.find(params[:id])
@microposts = @user.microposts.order(id: :desc).page(params[:page])
counts(@user)
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
flash[:success] = 'ユーザを登録しました。'
redirect_to @user
else
flash.now[:danger] = 'ユーザの登録に失敗しました。'
render :new
end
end
def followings
@user = User.find(params[:id])
@followings = @user.followings.page(params[:page])
counts(@user)
end
def followers
@user = User.find(params[:id])
@followers = @user.followers.page(params[:page])
counts(@user)
end
def likes
@user = User.find(params[:id])
@likes = @user.likes.page(params[:page])
counts(@user)
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
end
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
likes.html.erb
の11行目の<%= render 'microposts/microposts', microposts: @microposts %>
って<%= render 'microposts/micropost', microposts: @microposts %>
じゃないかな?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
Mashiro
2020/06/19 17:30
エラーメッセージが表示されたときにどのファイルのどの行って表示ありませんか?
yukikaze223
2020/06/19 17:33
エラー画像を加えて編集しました。
Mashiro
2020/06/19 17:36
コントローラーのrbの内容を載せていただくことは可能ですか?
yukikaze223
2020/06/19 17:42
コントローラーの追加をして編集しました
yukikaze223
2020/06/19 17:42
作成途中なのでおかしい部分もありますがよろしくお願いします