Почему я получаю сообщение об ошибке «Нет метода» и «Нет объекта» в следующей строке кодов? - PullRequest
1 голос
/ 24 августа 2011

Я пытаюсь реализовать следующий код в index.html.erb на рельсах, и на сервере появляется следующая ошибка:

NoMethodError в Users # index У вас есть нулевой объект, когда вы не ожидалиЭто!Возможно, вы ожидали экземпляр Array.Ошибка произошла при оценке nil.each

Извлеченный источник (вокруг строки # 2)

<div id="users">  
  <% @users.each do |user| %>  
<div id="user">  
      <% if user.username != current_user.username %>  
        <%=h user.username %>  
        <%= link_to "Add Friend", friendships_path(:friend_id => user), :method => :post %>  
      <% end %>  
    </div>  

  <% end %>  
</div>  

Код контроллера:

    class UsersController < ApplicationController

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      session[:user_id] = @user.id
      redirect_to root_url, :notice => "Thank you for signing up! You are now logged in."
    else
      render :action => 'new'
    end
  end
  end

  def edit
    @user = current_user
  end

  def update
    @user = current_user
    if @user.update_attributes(params[:user])
      redirect_to root_url, :notice => "Your profile has been updated."
    else
      render :action => 'edit'
    end
  end

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Вы получите это много с рельсами.
Чтобы объяснить: метод существует, поэтому сообщение об ошибке сбивает с толку.Проблема в том, что переменная (@users) не имеет никакого значения.Это ноль, а не действительный объект.Поэтому, когда вы пытаетесь вызвать этот метод на «ноль», вы получаете это сообщение об ошибке.Поэтому загляните в свой контроллер и убедитесь, что запрос, например, @users = User.all действительно возвращает записи, и вы также можете проверить это в консоли (скрипт / консоль или скрипт / консоль rails)

0 голосов
/ 24 августа 2011

Вы вызываете .each для своей переменной @users, но @users равен nil.

Пожалуйста, отправьте код контроллера, если вам требуется дополнительная помощь.

Если вы хотите исправить это представление, вы можете сделать:

<% if @users %>
  <div id="users">  
    <% @users.each do |user| %>  
     <div id="user">  
      <% if user.username != current_user.username %>  
        <%=h user.username %>  
        <%= link_to "Add Friend", friendships_path(:friend_id => user), :method => :post %>  
      <% end %>  
    </div>  

    <% end %>  
  </div>
<% end %>  
...