У меня такая же проблема. Я думаю, что ваш вопрос является дубликатом проверки Rails с перенаправлением (а также дублирован совсем недавно пользовательских ошибок проверки формы из контроллера внутри других родительских контроллеров 3.1 ).
Проблема с вышеупомянутым решением Pan Thomakos состоит в том, что если в VideosController#show
содержится больше, чем нетривиальное количество кода, то вы не сможете выполнить рендеринг из шаблона videos/show
без нарушения правила DRY. Вот обсуждение .
Этот пост Райана Бейтса о славе Railscasts предполагает, что вы можете сохранить @video
во флэш-памяти, чтобы сохранить его при перенаправлении; однако, когда я пытаюсь сделать это, он выходит на другую сторону как экземпляр правильного класса, но у него нет ни одного из ожидаемых суперклассов - самое главное ActiveRecord::Base
. Сначала я подумал, что, возможно, его совет просто устарел (он был написан в 2006 году). Тем не менее, один из ответов на Проверка Rails через перенаправление , написанный в октябре 2009 г., поддерживает тот же подход, хотя и с помощью пользовательского метода clone_with_errors
, который принимает поверхностную копию экземпляра модели, чтобы избежать проблем с более глубокими объекты. Но даже при таком подходе любые методы, основанные на суперклассах, не работают. Я предполагаю, что это является следствием сериализации объекта во флэш-память, а затем десериализации из него.
Я нашел страницу , написанную в 2007 году, которая выступает против сохранения экземпляров модельных объектов в сеансе .
Я также нашел хороший аргумент в группе Google Formtastic, указывающий, что перенаправление при сбое проверки не является Rails Way , и, вероятно, плохой идеей. Но это все еще не дает хорошего решения в случае, когда задействованы несколько контроллеров. Возможно, Ячейки могут быть использованы для решения проблемы СУХОЙ, упомянутой выше.
В противном случае, я думаю, что единственный ответ - придерживаться простых данных, таких как идентификаторы объектов, строки сообщений об ошибках и т. Д.