当用户尝试更新其配置文件时,我的应用程序似乎随机地抛出“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 = […],你应该是好的.