В действии обновления выбрасывается NoMethodError - PullRequest
1 голос
/ 10 января 2010

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

 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'

Я понятия не имею, как отладить это, и я не могу понять, как можно вызвать эту ошибку.

Любая помощь действительно ценится.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 мая 2010

Эта загадочная ошибка появляется, когда вы не используете объект yieled format . На самом деле, вы действительно должны что-то делать, когда не срабатывает вызов update_attributes, например, рендеринг шаблона edit :

  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
0 голосов
/ 10 января 2010

Если вы не отвечаете на не-html-клиенты, вам не нужно использовать response_to.

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

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

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

...