为什么我在下面的代码行中得到No Method和Nil Object错误?

时间:2011-08-23 21:07:51

标签: ruby-on-rails authentication erb null nomethoderror

我正在尝试在rails上的index.html.erb中实现以下代码,并且服务器上出现以下错误:

用户#index中的NoMethodError 当你没想到它时,你有一个零对象! 您可能期望一个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 个答案:

答案 0 :(得分:1)

你可以通过rails获得很多。
解释: 该方法确实存在,因此错误消息令人困惑。问题是变量(@users)没有任何值。它是零而不是有效的对象。因此,当您尝试在'nil'上调用该方法时,您会收到该错误消息。 因此请查看您的控制器并确保查询,例如@users = User.all实际上返回记录,你也可以在控制台(脚本/控制台或脚本/ rails控制台)中检查它

答案 1 :(得分:0)

你在@users变量上调用.each,但是@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 %>