1

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

Users#index 中的 NoMethodError 出乎意料的是,您有一个 nil 对象!您可能期望有一个 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
4

2 回答 2

1

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

于 2011-08-23T21:15:15.180 回答
0

您在 @users 变量上调用 .each ,但 @users 为零。

如果您需要其他帮助,请发布您的控制器代码。

如果你想纠正这个观点,你可以这样做:

<% 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 %>  
于 2011-08-23T21:10:42.480 回答