ruby-on-rails - 未定义方法 `each' 对于 nil :NilClass within Pages#friends

标签 ruby-on-rails ruby ruby-on-rails-4 undefined null

我试图让我的关注者显示在页面/ friend 上,但是,我不断收到多个错误,例如nil:NilClass的未定义方法“each” 在我的 Pages#friends 错误中。我正在关注 Michael Harlts 关于关注/取消关注的教程,但是,我需要调整一些内容,因为我没有关注整个内容。

当用户转到他们的 friend 链接(页面/ friend )时,我希望它显示关注他们的每个人。就像我的用户/索引如何显示每个人一样。请参阅下面我的代码。任何建议的帮助都会很棒。

信息页/好友

<h1>Friends</h1>

<% @user ||= current_user %>
 <% @users.each do |user| %>
     <center><%= link_to image_tag(user.avatar.url(:thumb)), user %></center>
     <strong><center><br><%= link_to user.name, user %></br></center></strong>
     <% if current_user.admin %>
 <% end %>
  <% end %>

页面/ Controller

  def home
  end

  def about
  end

  def friends
  end

end

**用户/索引*

<% provide(:title, 'All users') %>
<h1>All users</h1>

    <div class="col-md-offset-4 col-med-8">
        <div class="panel panel-default">
        <div class="panel-heading center">

  <% @users.each do |user| %>
     <center><%= link_to image_tag(user.avatar.url(:thumb)), user %></center>
     <strong><center><br><%= link_to user.name, user %></br></center></strong>
     <% if current_user.admin %>

  <% @user ||= current_user %>
      <div class="stats">
        <a href="<%= friends_path(@user) %>">
          <strong id="following" class="stat">
            <%= @user.followed_users.count %>
          </strong>
          following
        </a>
        <a href="<%= friends_path(@user) %>">
          <strong id="followers" class="stat">
            <%= @user.followers.count %>
          </strong>
          followers
        </a>
      </div>


 <center><%= link_to "Delete", user, method: :delete, data: { confirm: "Are you sure?" } %></center>
<% end %>
<% end %>

<div class="center">
<%= will_paginate @users, renderer: BootstrapPagination::Rails %>
</div>
</div>

路线

devise_for :admins
  devise_for :users

  resources :posts
  resources :users do
    member do
      get :following, :followers
    end
  end

  resources :relationships, only: [:create, :destroy]
  resources :user_friendships do 
      member do
        put :accept
      end
     end   

  get "users/show"


  root "pages#home"
  get 'feed', to: 'posts#index', as: :feed
  get "about" => "pages#about"
  get "friends" => 'pages#friends'


  match 'users/:id' => 'users#show', via: :get
  match 'users/:id' => 'users#index', via: :destroy


  match 'users/:id' => 'users#destroy', via: :get
  match 'users/:id' => 'users#destroy', via: :delete


  get '/:id', to: 'users#show'

用户/ Controller

class UsersController < ApplicationController

  before_action :correct_user, only: [:edit, :update, :destroy, :following, :followers]
  before_action :authenticate_user!, except: [:index, :show]
  before_action :admin_user,     only: :destroy


  def index
    @users = User.paginate(page: params[:page], :per_page => 5)
  end


  def show
    @user = User.find(params[:id])

    if @user 

        @posts = @user.posts.all
        render actions: :show 
    else
        render file: 'public/404', status: 404, formats: [:html]
    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


  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

  end
end

关系 Controller

class RelationshipsController < ApplicationController

  before_action :authenticate_user!, except: [:index, :show]


def create
    @user = User.find(params[:relationship][:followed_id])
    current_user.follow!(@user)
    respond_to do |format|
      format.html { redirect_to @user }
      format.js
    end
  end

  def destroy
    @user = Relationship.find(params[:id]).followed
    current_user.unfollow!(@user)
    respond_to do |format|
      format.html { redirect_to @user }
      format.js
    end
  end

end

最佳答案

错误undefined method 'each' for nil:NilClass意味着您正在调用 .eachnil 的对象上.

例如,这里,@users可能是nil :

def index
  @users = User.paginate(page: params[:page], :per_page => 5)
end

如果您随后调用<% @users.each ... %> ,您将得到 undefined method错误。您在上面发布了相当多的代码,因此很难确切地知道错误是在哪里抛出的。尝试找出抛出错误的确切位置(发布堆栈跟踪会有所帮助),并找出哪个对象是 nil 。然后找出为什么nil - 没有数据吗?或者您的 ActiveRecord 查询没有返回结果?

希望这能为您提供一些关于下一步从哪里开始寻找的指示。

编辑: 正如 mmichael 指出的那样,该错误是由于 @users 引起的。未在 pages#friends 中声明。谢谢!

关于ruby-on-rails - 未定义方法 `each' 对于 nil :NilClass within Pages#friends,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25004641/

相关文章:

ruby-on-rails - cucumber 防止清除数据库

ruby-on-rails - Rails 集合排序无法按预期使用 UTF-8 字符串

ruby-on-rails - 处理不兼容的字符编码 : UTF-8 and ASCII-8BIT

ruby-on-rails - Rails 按算法排序

ruby-on-rails - Rails 无法将 JSON 识别为响应类型

ruby-on-rails - 使用键的值作为同一散列中另一个键的值的一部分

ruby - 匹配上传的 PDF 文档的副本?

ruby-on-rails - 使用 link_to 帮助程序在新窗口中打开链接

mysql - 如果不同字段存在相同值并保持其唯一性,是否有办法更新 Rails 中的字段?

ruby-on-rails - 特殊字符 & 被打印为 &