В действии обновления генерируется NoMethodError

StackOverflow https://stackoverflow.com/questions/2035163

  •  19-09-2019
  •  | 
  •  

Вопрос

Это мой исходный код

 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.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, вам не обязательно использовать respons_to .

Попробуйте изменить метод на:

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

Если это сработает, ошибка выглядит так, как будто она находится где-то в конфигурации типа mime вашего приложения.

Другие советы

Эта загадочная ошибка появляется, когда вы не используете yieled формат объект.На самом деле, вам действительно следует что-то сделать, когда вызов update_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