nil的未定义方法'map':NilClass

Shp*_*ord 9 ruby-on-rails undefined

当用户试图更新他们的个人资料时,我的应用程序似乎随机抛出一个"未定义的方法`map'为nil:NilClass"错误.

但奇怪的是它说错误发生在更新上,但错误行实际上在视图中.

完整错误:

users#update (ActionView::TemplateError) "undefined method `map' for nil:NilClass"

On line #52 of app/views/users/edit.html.erb

Line 52: <%= options_from_collection_for_select(@networks_domestic, 'id', 'name', @user.network_id) %>
Run Code Online (Sandbox Code Playgroud)

以下是最近错误中的参数:

{"user"=>{"email_notify"=>"email@example.com", "network_id"=>"", 
"password_confirmation"=>"[FILTERED]", "mobile"=>"", "password"=>"[FILTERED]", 
"email"=>"email@example.com"}, "action"=>"update", "_method"=>"put", "id"=>"5089", 
"controller"=>"users"}
Run Code Online (Sandbox Code Playgroud)

老实说,不知道哪里开始寻找.我有一个用户说他可以从IE更新相同的信息,但不能从Firefox更新.当我使用相同的信息时,我可以毫无问题地更新.所以,我很难过.

Ton*_*not 18

最佳的揣测...

您的编辑功能正确定义,@networks_domestic所以一切都很好,直到您在更新功能和调用中遇到错误render :action => "edit".

渲染不会调用编辑功能,而只是渲染编辑视图.因此,在更新失败的情况下,您必须@networks_domestic在从更新返回之前定义.

例如,比方说,您有以下内容:

  def edit
    @user = User.find(params[:id])
    @networkd_domestic = [...]
  end

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

    respond_to do |format|
      if @user.update_attributes(params[:user])
        flash[:notice] = "User was successfully updated."
        format.html { redirect_to(admin_users_url) }
      else
        format.html { render :action => "edit" }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

您将收到您正在描述的错误,因为@networkd_domestic未在更新函数的错误条件中定义.

@networkd_domestic = [...]在编辑渲染之前添加,你应该很好.


Jer*_*olz 6

是否@networks_domentic在控制器中正确设置?<%= @networks_domestic.inspect %>在第52行之前添加,看看你得到了什么.检查@networkd_domestic.nil?控制器并确保不发送nil到视图.

编辑:

如果您查看源代码,options_from_collection_for_select您将看到它正在调用map您传递的集合(在本例中为@networks_domestic).