рендеринг ошибок simple_form

У меня есть список с постами (pages#home), по клику я открываю список с комментариями (posts#show), где объявляю переменную @feed_items. В конце комментариев у меня есть simple_form для нового комментария (comments#create). Проблема: если на кнопке отправки возникает ошибка, мне нужно отобразить существующий список с комментариями и форму с ошибками. Я пытаюсь в комментариях # создать:

if @comment.save
  ...
else
  render 'posts/show'
end

но в этом случае переменная @feed_items не объявлена, потому что метод posts#show не вызывался. Когда я пытаюсь написать redirect_to, я вижу список с комментариями, но без сообщений об ошибках. Как это сделать?


person cnaize    schedule 19.07.2012    source источник


Ответы (1)


Это распространенная ошибка людей. Метод render выбирает только представление для отображения, а метод redirect_to снова выполняет действие перенаправления.
При возникновении ошибок вы вызываете метод render, чтобы выбрать представление, которое хотите отобразить, и вам нужно вручную назначить все переменные экземпляра, которые должны обрабатываться этим представлением.
См. Section 2.3.2 в руководствах по рельсам: http://guides.rubyonrails.org/layouts_and_rendering.html

В вашем случае это будет примерно так:

if @comment.save
  ...
else
  # Populate the @feed_items in here again
  render 'posts/show'
end 
person MurifoX    schedule 19.07.2012