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

前端之家收集整理的这篇文章主要介绍了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 = […],你应该是好的.

猜你在找的Ruby相关文章