У меня есть страница, которая показывает книгу, и это много отзывов. На этой странице также есть форма, чтобы написать новый отзыв и опубликовать его в действии создания контроллера отзывов. Когда вы публикуете форму, отправляется также идентификатор соответствующей книги, чтобы отношения могли быть установлены правильно.
На контроллере отзывов мы пытаемся сохранить обзор. Вот как выглядит мой контроллер:
def create
@review = current_user.reviews.build(params[:review])
@book = Book.find_by_ean params[:book]
@review.book = @book
if @review.save
redirect_to book_path(@book)
else
# In here I want to go back to book_path(@book), sending @review with it so that I can have access to @review.errors
end
end
Конечно, когда рецензию не удается сохранить (например, рецензирование является обязательным), я хотел бы вернуться на страницу показа книги и отобразить форму вместе с ошибками для пользователя. Теперь, насколько я могу понять, здесь есть 2 возможности:
- render "books / show",: review => @review --- Это действительно возвращает отзыв с сопровождающими ошибками (думаю, не на 100%), но URL остается как "/ reviews", что вызывает тонны его собственных проблем. Например, партиалы, которые я храню в каталоге "/ books", не найдены.
- redirect_to book_path (@book) --- Это возвращает меня к нужному URL, но не отправляет @review вместе с ним, поэтому я не могу показать сообщения об ошибках.
Как лучше всего решить эту проблему?