سؤال

هذا هو شفمدي المصدر

 def update
    @recipe = Recipe.find(params[:id])

    respond_to do |format|
      if @recipe.update_attributes(params[:recipe])
        format.html {redirect_to :action => "edit" }
      end
    end
  end

أحصل على خطأ في هذا الخط

respond_to do |format|

وفصلت رسالة الخطأ "لديك كائن NIL عندما لا تتوقع ذلك. حدث الخطأ أثناء تقييم NIL.CALL".

الأسطر الخمسة من تتبع المكدس هي كما يلي

/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/mime_responds.rb:175:in `respond'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/mime_responds.rb:173:in `each'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/mime_responds.rb:173:in `respond'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/mime_responds.rb:107:in `respond_to'
/Path from my machine to the app/app/controllers/recipes_controller.rb:43:in `update'

ليس لدي أي فكرة عن كيفية تصحيح هذا ولا أستطيع أن أفهم كيف يمكن رفع هذا الخطأ.

أقدر مع الشكر أي مساعدة.

شكرا

هل كانت مفيدة؟

المحلول

إذا كنت لا تستجيب لعملاء غير HTML، فلن تضطر إلى استخدام Repound_to.

حاول تغيير الطريقة إلى:

  if @recipe.update_attributes(params[:recipe])
   redirect_to :action => "edit"
  end

إذا كان ذلك يعمل، يبدو الخطأ كما هو في مكان ما في تكوين نوع MIME لتطبيقك.

نصائح أخرى

يظهر هذا الخطأ الخبيذر عندما لا تستخدم Yieled صيغة هدف. في الواقع، يجب أن تفعل شيئا فعليا عندما تفشل مكالمة التحديث_Attributes، على سبيل المثال، مما يجعل تعديل قالب:

  def update
    @recipe = Recipe.find(params[:id])

    respond_to do |format|
      if @recipe.update_attributes(params[:recipe])
        format.html { redirect_to [:edit, @recipe] }
      else 
        format.html { render :template => 'edit' }
      end
    end
  end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top