ruby-on-rails – 未定义的方法’map’for nil:NilClass

用户尝试更新其配置文件时,我的应用程序似乎随机地抛出“nil:NilClass”错误的“undefined方法”映射.

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

错误

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) %>

这里是最近一个错误的参数:

{"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"}

老实说不清楚哪里甚至开始寻找.我有一个用户说他可以从IE更新相同的信息,但不能从Firefox更新.当我使用他们相同的信息时,我可以更新没有问题.所以,我被困了

解决方法

最佳的揣测…

您的编辑功能正确地定义了@networks_domestic,所以一切都很棒,直到在update函数中遇到错误调用render:action => “编辑”.

渲染不调用编辑功能,而只是渲染编辑视图.因此,在更新失败的情况下,您必须在从更新返回之前定义@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

你会得到你所描述的错误,因为在更新功能错误条件中没有定义@networkd_domestic.

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...