В действии обновления выбрасывается NoMethodError
Это мой исходный код
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 ответа
Если вы не отвечаете на не-html клиенты, вам не нужно использовать response_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