سؤال

يبدو أن تطبيقي يقوم بشكل عشوائي بإلقاء خطأ "طريقة غير محددة" ل 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) %>

وهنا هي المعالم من الخطأ الأخير:

{"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 لذلك كل شيء رائع حتى تواجه خطأ في وظيفة التحديث والاتصال render :action => "edit".

لا يسميه Render وظيفة تحرير ولكن فقط يجعل عرض تحرير. لذلك، في حالة وجود تحديث فاشل، سيتعين عليك تحديد @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 = [...] قبل تقديم تحرير ويجب أن تكون جيدا.

نصائح أخرى

يكون @networks_domentic الحصول على ضبط بشكل صحيح في وحدة تحكم؟ يضيف <%= @networks_domestic.inspect %> مباشرة قبل السطر 52 ونرى ما تحصل عليه. تحقق من وجود @networkd_domestic.nil? في وحدة التحكم والتأكد من أنك لا ترسل nil إلى الرأي.

تعديل:

إذا نظرت إلى المصدر ل options_from_collection_for_select سوف ترى أنه يتصل map في المجموعة التي تمر بمرورها (@ Networks_domestic في هذه الحالة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top