用户中的NoMethodError #index'未定义方法`每个'为nil:NilClass'

时间:2014-08-19 02:32:28

标签: ruby-on-rails ruby-on-rails-4 undefined nomethoderror

我在用户#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

1 个答案:

答案 0 :(得分:13)

错误NoMethodError表示您正在调用给定类不存在的方法。在这种情况下,它是nil:NilClass,显然,它不包含方法each,因为它是nil!所以,让我们来看看:

您正在调用正在调用错误的@users.each。因为它表示如果nil未定义的方法(如上所述),它告诉我们在index页面上,@usersnil(可能不是它的目的!) 。

所以看起来问题出在@users的定义中。我不完全确定,但看起来好像在UsersController end之后def following之后会导致控制器过早结束,因此没有定义@users。 (您可以通过将其更改为应该有效的@users = User.all来测试它。

让我知道事情的结果