我在用户#Index中收到一个NoMethodError,其中nil的'undefined方法'为':NilClass'为以下行:
<% @users.each do |user| %>
我不确定问题出在哪里。任何帮助是极大的赞赏。提前致谢。我知道我在这里错过了一些非常容易的东西。
用户/索引
<div class="page-header">
<center><strong><h1> All Users </h1></strong></center>
</div>
<div class="row">
<% @users.each do |user| %>
<div class="horizontal-align col-md-2">
<div class="user">
<center><%= link_to image_tag(user.avatar.url(:thumb)), user %></center>
<center><br><%= link_to user.name, user %></br></center>
<% if current_user.admin %>
<center><%= link_to "Delete", user, method: :delete, data: { confirm: "Are you sure?" } %></center>
<% end %>
</div>
</div>
<% end %>
</div>
</div>
<div class="center">
<%= will_paginate @users, renderer: BootstrapPagination::Rails %>
</div>
</div>
用户/显示
<% provide(:title, @user.name) %>
<div class="row">
<aside class="span4">
<section>
<h1>
<%= image_tag @user.avatar.url(:thumb) %>
<%= @user.name %>
</h1>
<section>
<%= render 'users/stats' %>
</section>
<% if current_user.following?(@user) %>
<%= render 'users/unfollow' %>
<% else %>
<%= render 'users/follow' %>
<% end %>
用户/控制器
class UsersController < ApplicationController
before_action :correct_user, only: [:edit, :update, :destroy]
before_action :authenticate_user!, except: [:index, :show]
before_action :admin_user, only: :destroy
def following
@title = "Following"
@user = User.find(params[:id])
@users = @user.followed_users.paginate(page: params[:page])
render 'show_follow'
end
def followers
@title = "Followers"
@user = User.find(params[:id])
@users = @user.followers.paginate(page: params[:page])
render 'show_follow'
end
def index
@users = User.paginate(page: params[:page], :per_page => 20)
end
def show
@user = User.find(params[:id])
if @user
@posts = @user.posts.order("updated_at DESC")
render actions: :show
else
render file: 'public/404', status: 404, formats: [:html]
end
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "Your account has been deleted."
redirect_to root_path
end
def correct_user
@user = User.find(params[:id])
redirect_to root_path
end
def admin_user
redirect_to root_path unless current_user.admin?
end
端
答案 0 :(得分:13)
错误NoMethodError
表示您正在调用给定类不存在的方法。在这种情况下,它是nil:NilClass
,显然,它不包含方法each
,因为它是nil
!所以,让我们来看看:
您正在调用正在调用错误的@users.each
。因为它表示如果nil未定义的方法(如上所述),它告诉我们在index
页面上,@users
是nil
(可能不是它的目的!) 。
所以看起来问题出在@users
的定义中。我不完全确定,但看起来好像在UsersController
end
之后def following
之后会导致控制器过早结束,因此没有定义@users
。 (您可以通过将其更改为应该有效的@users = User.all
来测试它。
让我知道事情的结果