В действии обновления генерируется NoMethodError
-
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